我一直在关注HandleError属性的本指南:
blogs.msdn.com
我这样使用(AccountController):
[HandleError(View="ErasErrorPage")]
public ActionResult Index()
{
ViewBag.admins = _accountMapper.GetAdmins(false);
ViewBag.members = _accountMapper.GetMembers(false);
ViewBag.Countries = _countryMapper.GetCountries();
return View();
}
此代码引发异常,因为
_accountMapper.GetAdmins(false)
由于System.Data.EntityException而失败。我已将ErasErrorPage视图放入共享文件夹中,并添加了
<customErrors mode="On"/>
,但未显示ErasErrorPage。错误发生时,我得到的只是一张黄色的死亡屏幕,上面写着:显然,将模式设置为“ Off”或“ RemoteOnly”不能解决问题。
有人知道为什么这行不通吗?
编辑
如果我直接浏览到http://localhost:3527/Account/Index,则可以得到正确的ErasErrorPage,但我不希望这样。当某个地方引发异常时,我希望网站自动重定向到该页面。这可能吗?
编辑2
我已经将
[HandleError(View="ErasErrorPage")]
属性放在每个单独的Public ActionResult methodName() { ... }
方法之前,并且仍然出现“死亡黄屏”,说我需要将模式更改为“关闭”或“仅远程”。 最佳答案
确保ErasErrorPage
视图本身不会引发异常。这是我执行的步骤,对我来说效果很好:
使用默认的Visual Studio向导创建一个新的ASP.NET MVC 3项目
添加具有以下内容的~/Views/Shared/ErasErrorPage.cshtml
:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<title>ErasErrorPage</title>
</head>
<body>
<div>
OOPS
</div>
</body>
</html>
修改HomeContoller如下所示:
public class HomeController : Controller
{
[HandleError(View = "ErasErrorPage")]
public ActionResult Index()
{
throw new Exception("oops");
}
}
在web.config中放:
<customErrors mode="On" />
导航到
/Home/Index
=>按预期显示自定义错误页面