我的页面上有以下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。
是什么给出了?
答案 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
函数,而我没有在这里设置错误信息。
这是一个内部应用程序,因此页面上显示的服务器信息没有问题。用户需要确切地知道出了什么问题,这就是这个系统的重点。