我的页面上有以下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"变量,我甚至可以放入一个消息属性并在响应中处理它。
但是,当抛出异常时,我收到以下控制台错误:
VM34:3 未捕获的引用错误:未定义数据
它甚至没有到达控制台.log。
什么给?
删除表单定义上回调的"(data("参数:
@using (Ajax.BeginForm("Activate", null, new AjaxOptions { HttpMethod = "POST", OnSuccess = "AccountActivateSuccess", OnFailure = "AccountActivateFailure" }, new { id = "searchForm" }))
并且,请验证回调 javascript 函数的作用域是全局的。
问题实际上是我需要从控制器执行e.ToString();
。同样令人困惑的是,我期望AccountActivateFailure
函数运行,但即使有一个例外,它也在 Try Catch 中,所以它被放入AccountActivateSuccess
函数中,我没有在这里设置错误消息。
这是一个内部应用程序,因此页面上显示服务器信息没有问题。用户需要确切地知道出了什么问题,这就是这个系统的重点。