异常处理在当前页面内打开错误页面

时间:2009-07-17 20:38:05

标签: asp.net-mvc error-handling

在我的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完全呈现在您将异常置于原始页面内的位置。

1 个答案:

答案 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" );