更改自定义Http404错误页面的默认视图文件夹
本文关键字:默认 视图 文件夹 自定义 Http404 错误 | 更新日期: 2024-09-20 21:03:37
我想在我的asp.net mvc3网站中自定义错误页面。
所以,我发现这个非常有用的帖子:asp.net MVC3上的自定义错误页面,它运行良好
但是,我的Http404.cshtml
文件不在Views
默认文件夹中。它位于名为BaseViews
的文件夹中。我的_Layout.cshtml
和其他视图或部分视图已在该文件夹中。
默认ViewEngine
不检查此文件夹(它只检查我的Areas
的Views
文件夹和所有views
文件夹)。因此,我使用ViewEngineExtension并将其添加到Global.asax
的Application_Start()
中的System.Web.Mvc.ViewEngines
集合中。我的所有应用程序都运行得很好,可以访问我的布局和其他BaseViews
内容。
关于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)
视图引擎在BaseViews
文件夹中搜索我的Http404.cshtml视图?
public class ErrorController : Controller
{
public ActionResult Http404()
{
return View("~/BaseViews/Error/Http404.cshtml");
}
}
但它不会起作用,因为你的错误被高估了,所以你没有得到预期的结果。为了绕过这个问题,你可以告诉你的应用程序你的应用中一切正常_error如下:
Request.StatusCode = 200;
我希望它能解决你的问题。
更改Http404
操作以返回其视图的完整路径。