我正在尝试按照this link和this one中的示例进行操作,但我没有显示错误页面,而是收到了HTTP 500内部服务器错误。
我在webconfig中设置了<customErrors mode="On" />
。我甚至尝试将[HandleError]
过滤器应用于控制器类。我也没试过。 Error.aspx也出现在/ Views / Shared /中,因此不能找到没有文件的情况。
我在控制器的操作方法中抛出了DivideByZero异常。我想遵循该示例,以便为所有需要它们的操作指定单独的错误页面。
我在我创建的空白项目中使用aspx视图引擎。这不应该是正确的理由吗?我也在使用母版页。我可能遗失的任何东西?
谢谢
编辑添加代码
我将此代码添加到新项目并创建了web.config条目<customErrors mode="On" />
[HandleError]
public class HomeController : Controller
{
//
// GET: /Home/
[HandleError]
public ActionResult Index()
{
throw new DivideByZeroException();
return View();
}
}
它没有用!然后我评论说DivideByZeroException并且在aspx视图中添加了无效的Model.Property。在这两种情况下,我都遇到了内部服务器错误我按照文档完成了所有要做的事情。我看到很多其他人遇到同样的问题而且也无法解决问题。这是MVC 3中的错误吗?
答案 0 :(得分:4)
我想我已经弄明白究竟是什么问题了。我的主要主页索引位于母版页中。我将相同的母版页添加到Visual Studio开箱即用的默认错误页面中,它对我有用。
文档需要更清楚地指出这个重要的要求,......如果它确实是一个。
另一个令人惊讶的启示是,您不需要使用[HandleError]
属性来装饰控制器类。对于默认的错误视图,它也可以不用它。如果您想要操作或控制器的特定自定义视图,则可以提供该属性。
像这样:
[HandleError(View = "CustomError")]
...其中CustomError.aspx只是View的共享文件夹或View-Controller文件夹本身中的另一个普通的aspx视图页面。
有没有人在没有将错误页面放在母版页中的情况下才能使用它,其中抛出错误的主调用页面位于母版页中?
答案 1 :(得分:1)
HandleError
过滤器未捕获所有错误。它不会捕获在控制器操作/操作过滤器之外引发的异常。此外,它不会捕获状态代码不是500
的HTTP异常。
因此,您必须确保抛出异常的位置,并且您不应仅依赖HandleError
来返回自定义错误页面,而且还必须在{{1}中设置自定义错误页面部分也是如此。
customErrors
答案 2 :(得分:0)
确保您已在web.config中激活自定义错误:
<customErrors mode="On" />
还要确保存在~/Views/Shared/Error.aspx
模板,因为这是出错时将呈现的内容。