ASP.NET - Ajax.BeginForm 带参数的 OnSuccess 回调函数

18

我想在我的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为空。
我该怎么做?

2个回答

34

由于您正在使用 get_response(),我猜测您没有使用 MVC3 中的不显眼 JavaScript 东西(您已将 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')"})

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

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

1
我不明白你应该如何使用“data”参数。它对我来说只是抛出一个异常,说“未定义数据”。 - rossisdead
@rossisdead 我知道这是老话题,但我知道很多人可能会有同样的疑问。data 参数是从服务器返回的,通常是 MVC 或 Web API 控制器。此结果可以作为 JsonResult 或简单的 Json 返回,您可以从结果中访问该对象的属性。 - Barry Tormey
@BarryTormey 如果我返回了 PartialViewModel 并且需要访问其中的一些属性怎么办? - Muflix

11

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 的标准参数是什么? - Dan Pettersson
请查看其源代码 @github: https://github.com/aspnet/jquery-ajax-unobtrusive - VahidN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接