asp.net mvc errorhandler没有显示自定义错误页面

时间:2012-06-27 16:43:53

标签: asp.net asp.net-mvc asp.net-mvc-3 exception-handling

我正在尝试按照this linkthis 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中的错误吗?

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模板,因为这是出错时将呈现的内容。