2012-12-15 54 views
0

当创建新的MVC3项目时,默认情况下,在GLobal.asax中将[HandleError]属性注册为GlobalFilter。但是,如果我对它进行注释并执行以下操作(在自定义错误模式下),它仍然有效。我看到ErrorView与ErrorInfo模型填充。那么在Global.asax中注册HandleError需要什么?为什么要在global.asax中注册HandleError

[HandleError(ExceptionType = typeof(NullReferenceException),View = "ErrorView")] 
     public ActionResult Index() 
     { 
      throw new NullReferenceException(); 
      return View(); 
     } 

回答

0

即设置默认的MVC异常处理策略。当出现未处理的异常时,它将呈现/Views/Shared/Error.cshtml视图,而不必在每个控制器或操作中显式添加HandleError属性。

然后,您可以将更具体的HandleError属性添加到您的控制器和/或操作中,因此您可以显示比默认视图更多的错误视图或处理更具体的异常类型。

为了使HandleError过滤器工作(全局与否),您只需确保在web.config中启用了自定义错误,如<customErrors mode="On" />(默认为RemoteOnly,因此在开发期间它们不会是执行)

这是很好的解释(下面的例子)here