2010-09-24 74 views
0

我有以下操作方法:麻烦用的HandleError

[HandleFtmsError] 
    public ActionResult PerformanceChart(ChartViewModel chart) 
    { 
     var x = 1; 
     var y = 0; 
     var z = x/y; 
     return Json(""); 
    } 

其中HaneleFtmsError被定义为:

public class HandleFtmsErrorAttribute : System.Web.Mvc.HandleErrorAttribute 
{ 
    public override void OnException(ExceptionContext context) 
    { 
     base.OnException(context); 
     if (context.ExceptionHandled) 
      RaiseErrorSignal(context.Exception); 
    } 

    private static void RaiseErrorSignal(Exception e) 
    { 
     var context = HttpContext.Current; 
     ErrorSignal.FromContext(context).Raise(e, context); 
    } 
} 

我想在动作方法的属性会被用DivideByZero例外执行,但它不起作用。我所看到的就是我正在执行该部门的代码中断。难道我做错了什么?

回答

0

当你说“代码中断”时,你的意思是它打入调试器吗?这可能只是标准的调试器行为,您可以通过Debug菜单的“Exceptions ...”项目进行更改。如果您再次点击F5 - 或者未经调试即可运行 - 您可能会看到您期望的行为。

MVC不会阻止引发异常(这是调试器的要求) - 它只是通过注意控制器上的属性并正确传递信息来处理异常。在调试器入侵的时候,目前还没有机会这样做。

+0

嗨,乔恩,我的意思是代码打入调试器。当我点击F5时,我预期会停在我已经在'RaiseErrorSignal'方法中设置的断点处。但是这并没有发生,所以我认为这表明它不起作用。 – DaveDev 2010-09-24 12:14:13

+0

@DaveDev:不,试着按F5让它继续前进,或者将除数为零的异常更改为* not * break into调试器,这样MVC就可以在调试器不处理的情况下处理它。 – 2010-09-24 12:19:45