Ajax从失败数据开始,不填充

时间:2018-06-12 13:42:51

标签: jquery ajax asp.net-mvc

我的页面上有以下Ajax助手。

@using (Ajax.BeginForm("Activate", null, new AjaxOptions { HttpMethod = "POST", OnSuccess = "AccountActivateSuccess(data)", OnFailure = "AccountActivateFailure(data)" }, new { id = "searchForm" }))

以下JS功能。

function AccountActivateSuccess(data) {
        console.log('account activate success');
        console.log(data);    
        //do stuff with information in data
    }

    function AccountActivateFailure(data) {
        console.log('account activate failure');
        console.log(data);
       //do stuff with information in data
    }

控制器响应如下:

[HttpPost]
public ActionResult Activate(MyModel model)
{
    try
    {
        //something spectacular
         return Json(new {success = true});
    }
    catch (Exception e)
    {
        return Json(new {success = false, message = e});
    }
}

当没有抛出错误时,会填充'data'变量,我甚至可以在其中放入一个message属性并在响应中获取句柄。

但是当抛出异常时,我收到以下控制台错误:

  

VM34:3未捕获的ReferenceError:未定义数据

它甚至没有进入console.log。

是什么给出了?

2 个答案:

答案 0 :(得分:1)

删除"(数据)"表单定义上回调的参数:

@using (Ajax.BeginForm("Activate", null, new AjaxOptions { HttpMethod = "POST", OnSuccess = "AccountActivateSuccess", OnFailure = "AccountActivateFailure" }, new { id = "searchForm" }))

另外,请确认回调javascript函数的范围是全局的。

答案 1 :(得分:0)

问题实际上是我需要从我的控制器执行e.ToString();。令人困惑的是,我期待AccountActivateFailure函数运行,但即使有异常,它也在Try Catch中,所以它正在进入AccountActivateSuccess函数,而我没有在这里设置错误信息。

这是一个内部应用程序,因此页面上显示的服务器信息没有问题。用户需要确切地知道出了什么问题,这就是这个系统的重点。