ASP.NET - Ajax.BeginForm OnSuccess使用params回调

Sex*_*yMF 13 .net c# ajax callback

我想在我的OnSuccess回调中添加更多参数(但保留ajax上下文变量).
我做的是:

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

JS功能:

function HandleBasicForm(ajaxContext , myCustomVariable){
            var content = ajaxContext.get_response().get_object();
            ....
        }
Run Code Online (Sandbox Code Playgroud)

但是ajaxContext没有.
我怎么做?

Ste*_*ham 29

因为你正在使用get_response()我猜你没有使用不引人注目的javascript东西(在你设置的MVC3中HtmlHelper.UnobtrusiveJavaScriptEnabled = false)并且你引用了MicrosoftAjax,js和MicrosoftMvcAjax.js文件.如果是这种情况,您只需要删除new关键字.

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

如果您使用jquery.unobtrusive-ajax.js的MVC3不显眼的javascript支持,那么您可以使用隐式可用xhrdata变量.

using (Ajax.BeginForm("Register", new AjaxOptions() { OnSuccess = "HandleBasicForm(data, 'MyCustomVariable')"})
Run Code Online (Sandbox Code Playgroud)

在您的处理程序中,不需要使用,get_response().get_object()因为反序列化的JSON数据将直接传递给您的处理程序.

function HandleBasicForm(data, myCustomVariable){
    var someValue = data.someProperty; //work with data object returned
    ....
}
Run Code Online (Sandbox Code Playgroud)


Vah*_*idN 10

OnSuccessdata, status, xhr从服务器接收:

OnSuccess = "myJsMethod(data, status, xhr)"
Run Code Online (Sandbox Code Playgroud)

然后它的等效JavaScript方法将是:

 function myJsMethod(data, status, xhr) {
}
Run Code Online (Sandbox Code Playgroud)

现在你的控制器应该返回:

return Json(new { param1 = 1, param2 = 2, ... }, JsonRequestBehavior.AllowGet);
Run Code Online (Sandbox Code Playgroud)

然后myJsMethod你将有权访问data.param1等等.

  • 我在哪里可以找到此信息的来源?例如OnFailure的标准参数是什么? (3认同)