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

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

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

JSfunction:

 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支持,那么您可以使用隐式可用的xhrdata变量。

 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 .... } 

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 ,依此类推。