我将ViewData传递给主视图,它们也在子视图中使用(它们从主视图传播)。 我们已经定制了HandleErrorAttribute
public class HandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute
{
public override void OnException(ExceptionContext context)
{
base.OnException(context);
var e = context.Exception;
if (!context.ExceptionHandled
|| RaiseErrorSignal(e)
|| IsFiltered(context))
return;
LogException(e);
}
使用相同的主视图发送给客户错误视图。 RaiseErrorSignal(e)向Elmah发送错误。 发生异常时,ViewData不会传递给母版页,而是会导致另一个异常。我在主视图中修复了异常,并为测试目的引入了异常操作方法:
Logger.Debug("Introducing bug in HomeController - About....");
Logger.DebugFormat("Request url: {0}, Request refferer: {1}", Request.Url, Request.UrlReferrer);
int b = 0;
int a = 1 / b;
然后我终于意识到在操作中抛出异常后,使用null ViewData渲染母版页,然后再次调用action方法!这是一个日志 - 我不得不在这里更改网址"请求的网址":
2014-05-15 14:04:43.087 [DEBUG] [21]:在HomeController中介绍bug - 关于....
2014-05-15 14:04:43.088 [DEBUG] [21]:请求网址:"请求的网址",请求引用者:"请求的网址"
2014-05-15 14:04:43.453 [DEBUG] [21]:为网址渲染母版页:"请求网址" ...
2014-05-15 14:04:43.454 [ERROR] [21]:母版页:ViewData为空......
2014-05-15 14:04:44.769 [DEBUG] [21]:渲染母版页完成....
2014-05-15 14:04:48.603 [DEBUG] [20]:在HomeController中介绍bug - 关于....
2014-05-15 14:04:48.603 [DEBUG] [20]:请求网址:"请求的网址",请求引用:(空)
2014-05-15 14:04:48.804 [DEBUG] [20]:为网址渲染母版页:"请求网址" ...
2014-05-15 14:04:48.804 [ERROR] [20]:母版页:ViewData为空......
2014-05-15 14:04:48.904 [DEBUG] [20]:渲染母版页完成....
有人可以解释一下吗?为什么在出现异常时动作方法会被击中两次?
客户端收到错误视图(只有一次),在elmah我们得到两次DivideByZero异常...