2011-11-07 21 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はnullです。
どうすればよいですか?

答えて

27

あなたは私はあなたが控えめなJavaScriptのものを使用していない(MVC3にあなたがHtmlHelper.UnobtrusiveJavaScriptEnabled = falseを設定している)、あなたはMicrosoftAjax、JSとMicrosoftMvcAjax.jsファイルを参照していることを推測しているget_response()を使用しているので。その場合は、newキーワードを削除するだけです。

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

あなたがあなたの代わりに暗黙的に利用可能xhrdata変数を使用することができjquery.unobtrusive-ajax.jsでMVC3控えめなJavaScriptのサポートを使用している場合。あなたのハンドラで

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

非直列化されたJSONデータが直接あなたのハンドラに渡されることになるので、get_response().get_object()を使用する必要はないだろう。

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を受け取る:今、あなたのコントローラが返す必要があります

function myJsMethod(data, status, xhr) { 
} 

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

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

をそしてそれと同等のJavaScriptメソッドは次のようになります

次にmyJsMethodにアクセスすればdata.param1となります。

+3

この情報の入手先はどこにありますか? OnFailureの標準パラメータは何ですか? –

+0

ソースコード@ githubで略奪者:https://github.com/aspnet/jquery-ajax-unobtrusive – VahidN