2011-11-07 21 views
14

OnSuccess geri aramama daha fazla param eklemek istiyorum (ama ajax bağlam değişkeni'u saklayın). Yaptıklarımı
geçerli:ASP.NET - Ajax.BeginForm OnSuccess geri aramaları

using (Ajax.BeginForm("Register", new AjaxOptions() { 
    OnSuccess = "new function(arg){HandleBasicForm(arg , 'MyCustomVariable')}", 
    ... 

JS işlevi:

function HandleBasicForm(ajaxContext , myCustomVariable){ 
      var content = ajaxContext.get_response().get_object(); 
      .... 
     } 

Ama ajaxContext boş.
Bunu nasıl yaparım?

cevap

27

Seni mütevazi javascript şeyler kullanmıyorsanız (MVC3 size HtmlHelper.UnobtrusiveJavaScriptEnabled = false kurdum) ile MicrosoftAjax, js ve MicrosoftMvcAjax.js dosyalarını referans olduğunuzu tahmin ediyorum get_response() kullandığınız beri. Bu durumda, sadece new anahtar kelimesini bırakmanız gerekir.

using (Ajax.BeginForm("Register", new AjaxOptions() { OnSuccess = "function(arg){HandleBasicForm(arg , 'MyCustomVariable')}"}) 

o zaman bunun yerine örtülü mevcut xhr ve data değişkenleri kullanabilirsiniz jquery.unobtrusive-ajax.js ile MVC3 göze batmayan javascript desteği kullanıyorsanız.

using (Ajax.BeginForm("Register", new AjaxOptions() { OnSuccess = "HandleBasicForm(data, 'MyCustomVariable')"}) 

işleyicinizde olarak Serileştirilmemiş JSON veri doğrudan işleyiciye verilen olacağını beri get_response().get_object() kullanmaya gerek kalmaz.

function HandleBasicForm(data, myCustomVariable){ 
    var someValue = data.someProperty; //work with data object returned 
    .... 
} 
+0

Perfectm teşekkürler! – Shazam

+1

"data" parametresini nasıl kullanacağınızı takip etmiyorum. Sadece "veri tanımlanmamış" diyerek benim için bir istisna atar. – rossisdead

+0

@rossisdead Bunun eski olduğunu biliyorum, ama biliyorum ki aynı şeyi merak ediyor olabilirsiniz. 'Data' parametresi genellikle bir MVC veya Web API denetleyicisi olmak üzere sunucudan döndürülür. Bu sonuç bir “JsonResult” veya sadece “Json” olarak iade edilebilir ve sonuçtan o nesnenin özelliklerine erişebilirsiniz. –

9

OnSuccess sunucudan data, status, xhr alır: Sonra

OnSuccess = "myJsMethod(data, status, xhr)" 

Ve eşdeğeri JavaScript yöntemi şöyle olacaktır:

function myJsMethod(data, status, xhr) { 
} 

Şimdi kontrolör dönmelidir:

return Json(new { param1 = 1, param2 = 2, ... }, JsonRequestBehavior.AllowGet); 

myJsMethod'da data.param1 ve benzeri erişime sahip olacaksınız.

+3

Bu bilgilerin kaynağını nerede bulabilirim? Örneğin OnFailure için standart parametreler nelerdir? –

+0

Kaynak koduna @github atın: https://github.com/aspnet/jquery-ajax-unobtrusive – VahidN

İlgili konular