OnSuccessコールバックにさらにパラメーターを追加したい(ただし、ajaxコンテキスト変数は保持する)。
私がしたことは:
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です。
それ、どうやったら出来るの?
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サポートを使用している場合は、代わりに暗黙的に使用可能なxhr
変数とdata
変数を使用できます。
_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
....
}
_
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
などにアクセスできるようになります。