web-dev-qa-db-ja.com

ASP.NET-パラメータを使用したAjax.BeginFormOnSuccessコールバック

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です。
それ、どうやったら出来るの?

14
SexyMF

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
    ....
}
_
29
Steve Rowbotham

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などにアクセスできるようになります。

10
VahidN