2013-03-06 60 views
3

我在我的控制器上设置了[HandleError]属性。在使用剃须刀的Asp.net MVC 4中,HandleError是否可以工作

这是我的动作方法:

public ActionResult ShowError() 
    { 

     throw new NullReferenceException(); 
     return View(); 
    } 

这个动作方法具有对应的图。

我已经在配置

<customErrors mode="On">  
</customErrors> 

设置自定义错误,我有Error.cshtml文件中的共享文件夹视图文件夹下。

现在导航到ShowError控制器方法带来了这个窗口,在我的IDE enter image description here

在按F5我在浏览器窗口,而不是从共享文件夹的错误页面得到这个。 enter image description here

还需要做什么才能显示错误页面?我如何获得HandleError的工作?

感谢

+2

检查你的'web.config'并设置'debug =“false”'。 – 2013-03-06 04:52:25

+0

您不应该手动抛出'NullReferenceException',它应该由Framework本身处理。检查[这里](http:// stackoverflow。com/a/4792296/1551730) – 2013-03-06 04:54:08

+0

感谢您的提示。这需要照顾第一个,但handleError仍然需要工作 – user20358 2013-03-06 04:55:13

回答

2

ö ķ。所以问题在于我使用的浏览器,即IE 9. IE 9似乎有问题,显示的错误页面少于一个KB。我把@(new String(' ', 1000))放在我的错误页面的末尾,并使其工作。

1

documentation指出

要启用自定义错误由HandleErrorAttribute 过滤处理的使用,一个的customErrors元素添加到应用程序 的Web.config文件的system.web节,如图以下示例:

<system.web> 
    <customErrors mode="On" defaultRedirect="Error" /> 
</system.web> 
+0

这也没有效果 – user20358 2013-03-06 05:21:40

+0

我按照文档做了所有事情。我在这里看到一个YouTube视频http://www.youtube.com/watch?v=Q-7Qa7JIvT0,演示者在没有使用defaultRedirect的情况下工作。唯一的区别是他使用的是aspx,而我正在使用Razor – user20358 2013-03-06 05:23:39

0

您可以将视图的名称放在defaultRedirect =“Error”中,如frictionlesspully所述,也可以在操作,控制器或全局的HandleError属性中指定。

[HandleError(View="Error")] 

视图可以被命名为比“错误”以外的东西,如果你明确的指定,例如,“SERVERERROR”

[HandleError(View="ServerError")] 

您还可以创建子文件夹瓦特/ /分享到如果你想要的灵活性

/Shared/Errors/Server.cshtml

,然后使用路径属性组中的多个错误的观点

[HandleError(View="Errors/Server")] 

在控制器和/ Shared文件夹中搜索错误视图的文件夹。