我一直在遵循 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 View 放在我的共享文件夹中并添加了 <customErrors mode="On"/>
但 ErasErrorPage 没有出现。发生错误时我得到的只是一个黄色的死亡屏幕:
显然,将模式设置为“Off”或“RemoteOnly”并不能解决问题。
有人知道为什么这行不通吗?
编辑
如果我直接冲浪到http://localhost:3527/Account/Index ,我确实得到了正确的 ErasErrorPage,但我不想要那个。我希望网站在某处抛出异常时自动重定向到该页面。这可能吗?
EDIT2
我已经把 [HandleError(View="ErasErrorPage")]
每一个之前的属性 Public ActionResult methodName() { ... }
方法,我仍然收到蓝屏死机提示我需要将模式更改为“关闭”或“仅远程”...
最佳答案
确保 ErasErrorPage
View 本身不会抛出异常。以下是我执行的步骤,对我来说效果很好:
- 使用默认的 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
=> 自定义错误页面按预期显示
关于c# - MVC3 HandleError 不显示错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5947388/