4

我正在尝试按照此链接链接中的示例进行操作,但没有显示错误页面,而是收到了 HTTP 500 内部服务器错误。我<customErrors mode="On" />在webconfig中有设置。我什至尝试将[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 中的错误吗?

4

3 回答 3

4

我想我已经弄清楚了真正的问题所在。我的主页索引位于母版页中。我将相同的母版页添加到 Visual Studio 开箱即用的默认错误页面中,它对我有用。

文档需要更清楚地指出这一重要要求,......如果它确实是一个。

另一个惊人的发现是你不需要用[HandleError]属性来装饰你的控制器类。没有它也适用于默认的错误视图。如果您想要为您的操作或控制器提供特定的自定义视图,您可以提供该属性。像这样:

[HandleError(View = "CustomError")]

...其中 CustomError.aspx 只是 View 的共享文件夹或 View-Controller 文件夹本身中的另一个普通 aspx 视图页面。

有没有人在没有将错误页面放在母版页中的情况下完成这项工作,而引发错误的主调用页面在母版页中?

于 2012-06-28T11:32:14.627 回答
1

过滤器HandleError不会捕获所有错误。它不会捕获在控制器操作/操作过滤器之外引发的异常。此外,它不会捕获具有除500.

所以你必须确定异常是在哪里被抛出的,你不应该仅仅依靠HandleError返回自定义错误页面,你还必须在该customErrors部分中设置一个自定义错误页面。

<customErrors defaultRedirect="error.htm" mode="On" 
  redirectMode="ResponseRewrite" />
于 2012-06-27T17:30:33.920 回答
0

确保您在 web.config 中激活了自定义错误:

<customErrors mode="On" />

还要确保~/Views/Shared/Error.aspx模板存在,因为这是在出现错误时将呈现的内容。

于 2012-06-27T16:47:32.380 回答