2012-10-12 19 views
5

मैं अजाक्स कॉल के साथ एक एमवीसी वेबसाइट बनाने की कोशिश कर रहा हूं। मुझे सीधे jquery का उपयोग करने में कोई समस्या नहीं है, लेकिन जब मैं @ Ajax.ActionLink का उपयोग करता हूं, तो मुझे नतीजा नहीं मिलता है। यहाँ मेरे विचार है:एमवीसी 4 अजाक्स। एक्शन लिंक टी काम जीता

<script type="text/javascript"> 
     function deleteComment(id) { 
      $.post(
       "/Role/AjaxTest", 
       //{ id: id }, 

       function (data) { 
        $("#testtarget").html(data);    
       }); 
     } 
    </script> 


    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
    <h2>TITLE</h2> 
    <p> 
@Ajax.ActionLink("Ajax Test", "AjaxTest", "Role", new AjaxOptions{UpdateTargetId="testtarget",HttpMethod = "Get" , InsertionMode = InsertionMode.Replace }) 
    </p> 
    <table>  
    @foreach (var item in Model) { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.RoleName) 
      </td> 
      <td> 
       <a onclick="deleteComment('@item.RoleId'); return false;" href="#">Delete</a> 
       @Html.ActionLink("Delete", "Delete", new { id=item.RoleId }) 

      </td> 
     </tr> 
    } 
    </table> 
    <div id="testtarget">Test Div</div> 

और यहाँ मेरी Controler डेटा है:

public string AjaxTest() 
{ 
    return "Some random text"; 
} 

Jquery पर मेरे कॉल पूरी तरह से काम करता है और पाठ div में प्रकट होता है, लेकिन मेरे actionlink सिर्फ करने के लिए मुझे पुनर्निर्देश: स्थानीय होस्ट/भूमिका/अजाक्सटेस्ट इसलिए मेरे पास बस एक बैंक ब्राउज़र में संदेश है।

कोई विचार क्या गलत है?

बहुत पहले से धन्यवाद! यदि आप बंडलों का उपयोग कर रहे हैं (जो सिफारिश की दृष्टिकोण है) यकीन है कि तुम एक बंडल इस स्क्रिप्ट युक्त शामिल किया है

<script type="text/javascript" src="~/scripts/jquery.unobtrusive-ajax.js"></script> 

या:

+0

क्या आप सुनिश्चित हैं कि 'jquery.unobtrusive-ajax.min.js' फ़ाइल लोड हो रही है? –

+0

हां, जब मैं अपने वेबपृष्ठ स्रोत में लिंक पर क्लिक करता हूं: यह इसे खोलता है। – Tom

उत्तर

9

सुनिश्चित करें कि आप अपने पृष्ठ के लिए jquery.unobtrusive-ajax.js स्क्रिप्ट को शामिल किया है सुनिश्चित करें।

@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/bundles/jqueryval") 
:

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
    "~/Scripts/jquery.unobtrusive*", 
    "~/Scripts/jquery.validate*") 
); 

तो यकीन है कि यह jQuery बंडल के बाद अपने दृश्य में शामिल हो जाता है: उदाहरण के लिए जब आप एक नया ASP.NET MVC 4 इंटरनेट खाका का उपयोग कर परियोजना बनाने कि ~/bundles/jqueryval बंडल किया जाएगा

या बस उन्हें एक बंडल में संयोजित करें। यह सब आपकी आवश्यकताओं पर निर्भर करेगा और क्या आपको अविभाज्य jquery सत्यापन समर्थन की आवश्यकता है या नहीं।

मैं भी सिफारिश करेंगे आप अपने नियंत्रक कार्रवाई वापसी ActionResult और नहीं स्ट्रिंग के लिए:

public ActionResult AjaxTest() 
{ 
    return Content("Some random text"); 
} 
+1

बिल्कुल सही, बहुत कुछ धन्यवाद, आपने जो कुछ भी कहा वह मेरे प्रोजेक्ट में था, मेरे पास @ स्क्रिप्ट्स नहीं है। रेंडर ("~/बंडल/jqueryval")। इसलिए मैंने इसे अपने पेज में जोड़ा और यह चाल है, क्या यह 'बुद्धिमान' है, इसे लेआउट 'मास्टर पेज' में डालने के लिए? मुझे लगता है कि यह बहुत सारे पृष्ठों में इस्तेमाल किया जा रहा है। आपकी सहायता के लिए धन्यवाद! 4 घंटों के लिए इस पर फंस गया था ... – Tom

2

आपके ब्राउज़र में F12 का उपयोग कर और यदि आप अपने कंसोल में किसी भी पटकथा त्रुटियों मिल देखने का प्रयास करें। फिडलर यह पहचानने में भी मदद करेगा कि आपकी कोई भी पुस्तकालय सही ढंग से संदर्भित या लोड नहीं है।

+0

धन्यवाद! यह मेरी समस्या का हिस्सा था, यह jquery इसके लिए परिभाषित नहीं किया गया था इसलिए मैंने अगली पोस्ट का सुझाव दिया। – Tom

संबंधित मुद्दे