2011-11-07 95 views
14

我想添加更多的參數給我的OnSuccess回調(,但保持ajax上下文變量)。
我所做的是:ASP.NET - Ajax.BeginForm OnSuccess回調參數

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

的JS功能:

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

ajaxContext爲空。
我該怎麼做?

回答

27

由於您使用的是get_response()我猜測您沒有使用不顯眼的JavaScript內容(在MVC3中設置了HtmlHelper.UnobtrusiveJavaScriptEnabled = false),並且您引用了MicrosoftAjax,js和MicrosoftMvcAjax.js文件。如果是這種情況,你只需要刪除new關鍵字。

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

如果您使用的是帶有jquery.unobtrusive-ajax.js的MVC3不顯眼的JavaScript的支持,那麼你可以使用默認可用xhrdata變量來代替。

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

在你的處理器就沒有必要使用get_response().get_object()因爲反序列化JSON數據將直接處理程序進行傳遞。

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

Perfectm謝謝! – Shazam

+1

我不是按照你應該如何使用「數據」參數。它只是拋出一個例外,說「數據未定義」。 – rossisdead

+0

@rossisdead我知道這是舊的,但我知道很多人可能會想知道同樣的事情。 'data'參數是從服務器返回的內容,通常是MVC或Web API控制器。這個結果可以作爲JsonResult或簡單的Json返回,你可以從結果中訪問該對象的屬性。 –

9

OnSuccess從服務器接收data, status, xhr

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

然後將其等同JavaScript方法是:

function myJsMethod(data, status, xhr) { 
} 

現在你的控制器應返回:

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

然後在myJsMethod中,您將有權訪問data.param1等。

+3

我在哪裏可以找到這些信息的來源?例如,OnFailure的標準參數是什麼? –

+0

在源代碼中獲取戰利品@ github:https://github.com/aspnet/jquery-ajax-unobtrusive – VahidN

相關問題