自定义错误页面未被调用

时间:2013-08-12 08:31:32

标签: asp.net asp.net-mvc asp.net-mvc-4

我需要在MVC 4中实现自己的自定义错误页面。基本上,当用户尝试查看任何不存在productID的产品Details时,我想要这个自定义错误页面。

我创建了自己的自定义错误页面NotFound.aspx

此页面的内容包括:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Simple.Master" 
Inherits="System.Web.Mvc.ViewPage<System.Web.Mvc.HandleErrorInfo>" %> 
<asp:Content ID="errorTitle" ContentPlaceHolderID="TitleContent" runat="server"> 
Error 
</asp:Content> 
<asp:Content ID="errorContent" ContentPlaceHolderID="MainContent" runat="server"> 
<h2> 
Sorry, you requested a product that doesn't exist. Make sure you
requested a valid ProductID 
</h2> 
</asp:Content>

然后将HandleError过滤器应用于我的ActionMethod:Details

[HandleError(View="NotFound")] 
public ActionResult Details(int id) {...

问题在于,始终默认视图:Views/Shared/Error.aspx正在调用,而不是新的自定义错误页面。有什么想法吗?

4 个答案:

答案 0 :(得分:3)

试试这个(但我不确定在MVC中使用此代码)。将此代码粘贴到web.config文件brlow system.web。

中的配置部分
 <customErrors mode="On" defaultRedirect="ErrorPage.aspx">
    </customErrors>
    <compilation debug="true" targetFramework="4.0">

答案 1 :(得分:2)

尝试使用可能对您有所帮助的Web配置文件中的自定义错误标记。

以下是样本

<system.web>
   <--- other required may be used here--->     

    <customErrors mode="On" defaultRedirect="ErrorPage.aspx"></customErrors>
  </system.web>

答案 2 :(得分:1)

解决方案是我的ProductController类还需要将order属性设置为:

[HandleError(Order=2)] 
public class ProductController : Controller { ... }

这意味着什么:Order值为2将确保只有在没有的情况下才会应用控制器范围的过滤器 HandleError过滤器具有更高的可用顺序。

这完美无缺。我的web.config设置是: <customErrors mode="On" />

就是这样。根本不需要defaultRedirect

注意: 我最初使用HandleError过滤器,没有order属性。

[HandleError] 
public class ProductController : Controller { ... }

当您应用不带参数的HandleError过滤器时,您指定任何异常 由过滤器覆盖的方法抛出将导致使用Views/Shared/Error.aspx视图。

答案 3 :(得分:0)

确保在同一控制器中执行“未发现”操作和“详细信息”操作。否则,您应该指定控制器名称,或将notfound.aspx放在共享文件夹