Asp.net mvc 异常处理将打开当前页内的错误页

Asp.net mvc 异常处理将打开当前页内的错误页,asp.net-mvc,error-handling,Asp.net Mvc,Error Handling,在我的ASP.NET MVC应用程序中,我通过覆盖控制器中的OneException来处理错误。发生的情况是,如果页面上发生运行时错误,error.aspx页面将在发生错误的页面内打开。下面是代码(删除了一些额外的错误消息): Error.aspx页面位于共享目录中。例如,假设我的视图是Author类型,我的模型有一个挂在上面的图书表,用户对图书没有读取权限。当我试图引用 <%=Model.Books.Count> 整个Error.aspx页面显示在应该计数的位置。我如何让它重

在我的ASP.NET MVC应用程序中,我通过覆盖控制器中的OneException来处理错误。发生的情况是,如果页面上发生运行时错误,error.aspx页面将在发生错误的页面内打开。下面是代码(删除了一些额外的错误消息):

Error.aspx页面位于共享目录中。例如,假设我的视图是Author类型,我的模型有一个挂在上面的图书表,用户对图书没有读取权限。当我试图引用

<%=Model.Books.Count>

整个Error.aspx页面显示在应该计数的位置。我如何让它重定向到错误页面并将问题页面留在后面

更新:

一个简单的例子是

<% Throw New Exception("b0rkd")%>

在视图的顶部。Error.aspx将在原始页面中放置异常的位置完全呈现。

Edit

在处理结果时发生异常的情况下,替换结果将不起作用,因为已呈现结果。在这种情况下,您可以尝试清除现有结果并显式呈现错误结果

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

有道理,但这似乎没有改变任何东西-仍然在原始页面中呈现。我现在看到问题了。在执行结果时出现异常。到那个时候,更换它已经太晚了。如果在操作执行期间发生异常,这将起作用。我会更新我的答案。答对了!谢谢你的编辑-如果不知道该问什么问题,这不是一个容易研究的话题。
 filterContext.ExceptionHandled = true;
 filterContext.Result = View("Error" );