2012-10-12 17 views
5

Ajax çağrısı ile MVC web sitesi oluşturmaya çalışıyorum. Doğrudan jquery kullanarak sorunum yok, ama @ Ajax.ActionLink kullandığımda, istediğim sonucu alamıyorum. İşte benim görünümdür:MVC 4 Ajax.Action bağlantısı işe yaramaz

<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> 

ve burada benim Denetleyici veridir:

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

jQuery My Çağrı mükemmel çalışıyor ve metin div görünür, ancak benim actionlink sadece beni yönlendirir: localhost/Rol/AjaxTest böylece sadece bir banka tarayıcısında mesajım var.

Burada neyin var?

Çok önceden teşekkürler! Bu komut dosyasını içeren bir paket dahil ettik emin olun (önerilen yaklaşım olan) paketleri kullanıyorsanız

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

ya:

+0

Eğer 'jquery.unobtrusive-ajax.min.js' dosya yükleniyor emin misiniz? –

+0

Evet, benim web sayfası kaynağındaki linki tıkladığınızda: onu açar. – Tom

cevap

9

sayfanıza jquery.unobtrusive-ajax.js senaryoyu eklemiş emin olun.

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

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

Yani emin jquery paket sonra görünüme dahil edilecek olun: Internet Template kullanarak yeni ASP.NET MVC 4 proje oluştururken Örneğin o ~/bundles/jqueryval paket olurdu

Veya bunları tek bir pakette birleştirin. Tüm gereksinimlerinize ve göze batmayan jQuery doğrulama desteğine ihtiyacınız olup olmadığına bağlıdır.

Ben de size denetleyicisi eylem dönüş ActionResult değil dize olması öneriyoruz:

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

Mükemmel, çok teşekkürler, projemde söylediğim her şey, sadece Scripts.Render ("~/bundles/jqueryval") 'a sahip değildim. Bu yüzden onu sayfama ekledim ve hile yaptım, 'bilge', bunu 'ana sayfa' düzenine yerleştirmek mi? Bir sürü sayfada kullanılacak gibi tahmin ediyorum. Yardımın için çok teşekkürler! 4 saat gibi bunun üzerinde sıkışmış ... – Tom

2

deneyin tarayıcınızda F12 kullanarak ve sizin konsolunda herhangi komut dosyası hatası varsa kontrol ediyorum. Fiddler ayrıca kütüphanelerinizin herhangi birinin doğru bir şekilde referans alınmadığını veya yüklenmediğini belirlemeye yardımcı olacaktır.

+0

Teşekkürler! Bu benim sorunumun bir parçasıydı, jquery bunun için tanımlanmadı, bu yüzden bir sonraki yazının önerisini yaptım. – Tom