2011-06-02 63 views
11

在我的web.config,我有:無法獲得的defaultRedirect工作

<system.web> 
    <customErrors mode="On" defaultRedirect="Error.cshtml" /> 
</system.web> 

在查看/共享/ Error.cshtml,我有:

@model System.Web.Mvc.HandleErrorInfo 
@{ 
    ViewBag.Title = "Error"; 
} 
<h2> 
    Sorry, an error occurred while processing your request. 
</h2> 

如果我把一個無效URL /路由到我的瀏覽器,我得到這個:

'/'應用程序中的服務器錯誤。

無法找到該資源。

說明:HTTP 404.您正在查找的資源(或其某個依賴項)可能已被刪除,名稱已更改或暫時不可用。請檢查以下網址並確保它拼寫正確。

請求的URL:/Error.cshtml

爲什麼不能Error.cshtml找到?該文件絕對在Views/Shared中。

+0

的可能的複製[如何使自定義錯誤頁在ASP.NET MVC 4工作(http://stackoverflow.com/questions/13905164/how-to-make-custom-error-pages -work-in-asp-net-mvc-4) – Liam 2016-10-10 14:04:13

+0

答案適用於MVC3以及4^ – Liam 2016-10-10 14:04:29

回答

7

defaultRedirect不會直接進入視圖。您的defaultRedirect看起來像一個無法處理的剃鬚刀視圖文件。例如:它從哪裏得到模型?它不是,也不能在配置文件中指定,因此無法處理視圖。

如果你想在MVC更加動態的錯誤頁面,你可能需要閱讀custom error pages and error handling in MVC 3

+0

你的答案與這個答案矛盾:http://stackoverflow.com/a/13905859/507339。從我的測試中,我確實體驗到一個類型爲HandleErrorInfo的模型實際上是由框架注入的。您可能需要在web.config中放置「.cshtml」擴展名,儘管 – Nilzor 2014-01-03 09:23:22

+0

@Colin - 如果在FilterConfig中註冊了全局錯誤處理程序(例如filters.Add(new HandleErrorAttribute());),應該沒有問題。控制器不存在1:1的視圖要求。按慣例這只是這樣。 – Matt 2015-09-21 19:05:04

2

你應該[HandleError]屬性標記您的控制器操作或註冊爲全局過濾

編輯: 這是因爲自定義錯誤的重定向功能屬於ASP.NET的基礎設施和一無所知ASP。 NET MVC。

您應該創建單獨的控制器來管理重定向並在您的Web.config中指定url。或者你可以創建靜態HTML文件,並將其放入根目錄(或其他任何地方,除了Views目錄)

+0

沒有什麼區別......它仍然說它找不到Error.cshtml。如果用戶輸入一個甚至不包含有效控制器的URL,該怎麼辦? – devuxer 2011-06-02 08:03:47

+0

啊,現在我明白了。您應該創建單獨的控制器來管理重定向,並在您的Web.config中爲其指定url。或者你應該創建靜態HTML文件,不要把它放到視圖文件夾 – xelibrion 2011-06-02 08:35:10

1

一種解決方案是創建ErrorController

public class ErrorController : Controller 
{ 
    // 
    // GET: /Error/ 

    public ActionResult Error() 
    { 
     return View(); 
    } 

    public ActionResult Error404() 
    { 
     return View("Error"); 
    } 

} 

變化的Web.config

3

編輯你的web.config爲:

<system.web> 
    <customErrors mode="On" defaultRedirect="/Home/Error" /> 
</system.web> 

如果使用asp.net的MVC 1.0或2.0,您應該添加的HandleError屬性爲每個控制器:

[HandleError] 
public class HomeController: Controller 
{ 
    public ActionResult Error() 
    { 
     return View(); 
    } 
} 

如果你使用asp.net的MVC 3.0:

public class MvcApplication : System.Web.HttpApplication 
{ 
     protected void Application_Start() 
     { 
      GlobalFilters.Filters.Add(new HandleErrorAttribute()); 
     } 
} 
+0

謝謝,但這是行不通的。/Home/Error中出現「資源未找到」錯誤。我正在使用ASP.NET MVC 3,並且我已經添加了'HandleErrorAttributes'過濾器。 – devuxer 2011-06-02 17:55:30

+0

您在/ your-web-root/Views/Home /中有「錯誤」視圖名稱嗎? – hellangle 2011-06-07 08:14:37

+0

難道你不需要〜,就像Rajesh的回答一樣?我做到了。 – Dronz 2015-11-17 21:47:12

5

它的工作原理爲了我。只需在網絡上進行此更改即可。配置:

<system.web> 
    <customErrors mode="On" defaultRedirect="~/Views/Shared/Error.cshtml"> 
    </customErrors> 
</system.web> 
+0

這幾乎爲我工作。我不得不放棄.cshtml:defaultRedirect =「〜/ Public/Error」是我所需要的。 – Dronz 2015-11-17 21:46:23