我想在我的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