2013-04-17 143 views
1

我有一個新的MVC 4.0解決方案,使用VS2012 web express和IIS Express從頭開始創建。 由於瓦說,我改變了我的web.config和添加以下:自定義錯誤不會重定向到自定義頁面,但MVC默認錯誤頁面

<customErrors defaultRedirect="Errors/GenericError.html" mode="On"> 
    <error statusCode="404" redirect="Errors/Error404.html"/> 
</customErrors> 

基本上當我在我的控制器得到一個異常的默認MVC error.cshtml顯示錯誤,而不是我的自定義頁面GenericError。 HTML。

如果我去了一個不存在的URL,我的Error404.html顯示正確,但不是通用場景。

任何想法如何改變這種行爲?

回答

2

聽起來像你沒有全局過濾器中的錯誤屬性。在MVC 4項目,你應該能夠以搜索爲您生成的類FilterConfig

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 
    } 
} 

更新:

HandleErrorAttribute全局過濾是發生在MVC管道發生錯誤,例如您提到的控制器中的錯誤。

web.config中的customErrors元素用於其他任何事情。 HandleErrorAttribute將不會兌現您在customErrorsdefaultRedirect屬性中輸入的值。

HandleError過濾器將查找您應該在生成的項目shared\Error.cshtml中擁有的共享視圖。您可以通過在屬性上設置屬性將其指向不同的視圖。

例如,假設我們Shared\Errors\CustomError.cshtml下創建一個新的觀點,那麼你可以註冊過濾器是這樣的:被完全地從模板生成

filters.Add(new HandleErrorAttribute(){View = "Errors/CustomError"}); 
+0

我的解決方案,因此它的存在在AppStart的/ FilterConfig.cs。否則,它甚至不會在共享視圖中顯示錯誤頁面,我猜? 這是我的FilterConfig.cs: using System.Web; using System.Web.Mvc; 命名了myNameSpace { 公共類一個FilterConfig { 公共靜態無效RegisterGlobalFilters(GlobalFilterCollection過濾器) { filters.Add(新HandleErrorAttribute()); } } } – Jay

+0

好的,這正是我所經歷的行爲,所以現在你用這種方式解釋我至少可以把握這個概念。我會玩弄你提到的有關使用不同觀點的消聲。非常感謝。標記爲已回答。 – Jay

+0

是否有任何HandleErrorAttribute如何依賴於MVC管道的引用?例如,當路徑到達一個不存在的控制器時,這似乎被web.config中的customErrors捕獲,但解析控制器應該在MVC管道中,對吧? – Alex