我想在我的asp.net mvc3網站自定義錯誤頁面。更改自定義Http404錯誤頁面的默認視圖文件夾
所以,我發現這非常有用的帖子:Custom error pages on asp.net MVC3,而且運作良好
但是,我Http404.cshtml
文件不在Views
默認文件夾。它位於名爲BaseViews
的文件夾中。 我已經有我的_Layout.cshtml
和該文件夾中的其他視圖或部分視圖。
此文件夾沒有被默認的ViewEngine
(它只檢查Views
文件夾和我的Areas
的所有views
文件夾)檢查。因此,我使用ViewEngineExtension並將其添加到我的Global.asax
的Application_Start()
中的System.Web.Mvc.ViewEngines
集合中。我的所有應用程序工作得很好,可以訪問我的佈局和其他東西。我不能說Global.asax
的Application_Error()
。此方法忽略了以前的視圖引擎,只能查看默認視圖文件夾。 我試圖像ViewEngines.Engines.Add(new BaseViewsEngineExtension());
那樣在Application_Error()
方法中添加我的ViewEngineExtension,但它不會改變任何東西。這與我在Application_Start()
中使用的完全一樣。
見我的代碼爲Application_Error()
:
protected void Application_Error()
{
var exception = Server.GetLastError();
var httpException = exception as HttpException;
Response.Clear();
Server.ClearError();
var routeData = new RouteData();
routeData.Values["controller"] = "Error";
routeData.Values["action"] = "Index";
routeData.Values["exception"] = exception;
Response.StatusCode = 500;
if (httpException != null)
{
Response.StatusCode = httpException.GetHttpCode();
switch (Response.StatusCode)
{
case 404:
routeData.Values["action"] = "Http404";
break;
}
}
IController errorController = new ErrorController();
var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
errorController.Execute(rc);
}
我的問題是:我怎麼能強迫errorController.Excecute(rc)
視圖引擎來搜索我Http404.cshtml視圖中BaseViews
文件夾?
我仍然不知道如何在'Application_error'中定義視圖引擎,但沒關係。將'StatusCode'改爲200就可以了,謝謝。 – Florent 2012-08-02 10:19:00