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

时间:2011-11-07 09:12:10

标签: c# .net ajax callback

我想在我的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 个答案:

答案 0 :(得分: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')}"})

如果您使用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
    ....
}

答案 1 :(得分:10)

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