在我的ASP.NET MVC应用程序中,我通过覆盖控制器中的OnException来处理错误。发生的事情是,如果页面上发生运行时错误,Error.aspx页面会在发生错误的页面中 。这是代码(删除了一些额外的错误消息):
Protected Overrides Sub OnException(ByVal filterContext As System.Web.Mvc.ExceptionContext)
MyBase.OnException(filterContext)
filterContext.ExceptionHandled = True
View("Error").ExecuteResult(ControllerContext)
End Sub
Error.aspx页面位于共享目录中。例如,假设我的View属于Author类型,并且我的模型有一个挂起的Book表,并且用户没有Book上的读取权限。当我尝试引用
时<%=Model.Books.Count>
整个Error.aspx页面显示在计数应该是的位置。如何将其重定向到错误页面并将问题页面留在后面?
更新
更简单的例子就是放
<% Throw New Exception("b0rkd")%>
位于视图顶部。 Error.aspx完全呈现在您将异常置于原始页面内的位置。
答案 0 :(得分:2)
修改强>
如果在处理结果时发生异常,则替换结果将不起作用,因为结果已经被渲染。在这种情况下,您可以尝试清除现有结果并显式呈现错误结果。
protected override void OnException( ExceptionContext filterContext )
{
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.ClearContent();
ViewResult view = new ViewResult { ViewName = "Error" };
view.ExecuteResult( filterContext.Controller.ControllerContext );
}
<强>原始强>
将filterContext上的结果设置为错误视图,而不是将错误视图呈现给响应。
filterContext.ExceptionHandled = true;
filterContext.Result = View("Error" );