【问题标题】:ASP.NET - Ajax.BeginForm OnSuccess call back with paramsASP.NET - Ajax.BeginForm OnSuccess 使用参数回调
【发布时间】:2011-12-23 11:41:51
【问题描述】:

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

【问题讨论】:

    标签: c# .net ajax callback


    【解决方案1】:

    由于您使用的是 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 unobtrusive 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
        ....
    }
    

    【讨论】:

    • 我没有遵循您应该如何使用“数据”参数。它只是给我抛出一个异常,说“数据未定义”。
    • @rossisdead 我知道这是旧的,但我知道很多人可能想知道同样的事情。 data 参数是从服务器返回的,通常是 MVC 或 Web API 控制器。此结果可以返回为JsonResult 或简单的Json,您可以从结果中访问该对象的属性。
    • @BarryTormey 如果我返回PartialViewModel 并且我需要访问它的某些属性怎么办?
    【解决方案2】:

    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 等等。

    【讨论】:

    猜你喜欢
    • 2011-11-09
    • 2018-09-21
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 2011-07-30
    相关资源
    最近更新 更多