我一直在关注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 =>按预期显示自定义错误页面

09-25 20:41