我想在我的 asp.net mvc3 网站中自定义错误页面。
所以,我发现这篇非常有用的帖子:asp.net MVC3 上的自定义错误页面,它运行良好
但是,我的Http404.cshtml
文件不在Views
默认文件夹中。它位于一个名为BaseViews
. 我已经_Layout.cshtml
在该文件夹中有我的视图和其他视图或部分视图。
默认情况下不检查此文件夹ViewEngine
(它只检查文件夹和myViews
的所有文件夹)。因此,我使用 ViewEngineExtension 并将其添加到我的. 我所有的应用程序都运行良好,可以访问我的布局和其他内容。views
Areas
System.Web.Mvc.ViewEngines
Global.asax
Application_Start()
BaseViews
我不能对Global.asax
's说同样的话Application_Error()
。此方法忽略以前的视图引擎,只查看默认视图文件夹。我试图Application_Error()
像这样在方法中添加我的 ViewEngineExtension ,ViewEngines.Engines.Add(new BaseViewsEngineExtension());
但它没有改变任何东西。这与我在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)
视图引擎在BaseViews
文件夹中搜索我的 Http404.cshtml 视图?