ASP.NET MVC OnException和Ajax Form onFailure

时间:2009-08-21 19:35:26

标签: asp.net-mvc

我遇到的情况是我在控制器中处理OnException。根据异常的类型,我想返回一个javascript结果。通过提交ajax表单来调用抛出异常的操作方法。 ajax表单处理成功事件。在我的OnException方法中,我根据我看到的所有示例设置ExceptionHandled = true。问题是即使抛出了一个异常,我返回了一个JavascriptResult,调用了成功方法,并且我没有执行返回的javascript。关于为什么会发生这种情况以及如何让JavascriptResult执行的任何建议。

1 个答案:

答案 0 :(得分:2)

以下是事件的顺序:

  1. 浏览器发送了ajax请求
  2. 服务器上的action方法开始执行,并引发异常。
  3. 你的OnException方法有机会查看异常,并决定设置ExceptionHandled = true。
  4. 此外,您的OnException方法返回了JavascriptResult
  5. 当ExceptionHandled设置为true时,MVC在此时停止异常处理链,并将JavascriptResult返回给浏览器,HTTP结果代码为200 OK
  6. 浏览器上的ajax代码接收结果,并将其解释为表示一切正常;然后调用OnComplete,然后调用OnSuccess。
  7. 您的选择是:

    1. 在从OnException返回之前,在响应上设置状态代码500。浏览器将调用OnComplete,然后调用OnFailure。

    2. 处理OnComplete中的返回值,而不是OnSuccess中的返回值,然后返回false以指示不应调用OnSuccess。