我需要在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
正在调用,而不是新的自定义错误页面。有什么想法吗?
答案 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放在共享文件夹
下