【问题标题】:Asp.net MVC exception not being caught in try catch block在 try catch 块中未捕获 Asp.net MVC 异常
【发布时间】:2010-01-21 00:18:18
【问题描述】:

谁能告诉我为什么这个 try catch 不能捕捉到名词模型中的问题?

我现在已经在两种不同的控制器方法上尝试过这个,而且两次,即使 linq2sql 不允许保存数据,代码也永远不会跳转到 catch 块中。

我看过trace中间的名词对象,isvalid属性为假,而modelstate isvalid为真。无论哪种方式,代码都不会跳转到 catch 块中。

我对此感到很恼火。我觉得这将是一件非常愚蠢的事情。

代码的工作方式都类似于书呆子晚餐。

NounRepository nounRepository = new NounRepository();
        Noun noun = new Noun();
        try
        {                
            UpdateModel(noun);
            nounRepository.Add(noun);
            nounRepository.save();
        }
        catch (Exception ex)
        {
            ModelState.AddRuleViolations(noun.GetRuleViolations());
            return View(noun);
        }
    return View(noun);

更新

我刚刚添加了这段代码,现在规则回到前端很好,所以看起来try catch没有捕捉到!

UpdateModel(noun);

            if (!noun.IsValid)
            {

                var errors = noun.GetRuleViolations();
                ModelState.AddRuleViolations(noun.GetRuleViolations());
                return View(noun);

            }

            nounRepository.Add(noun);
            nounRepository.save();

我宁愿不必以这种方式添加代码,因为这似乎是不必要的重复。

【问题讨论】:

    标签: asp.net asp.net-mvc validation model


    【解决方案1】:

    你在 mvc 中遇到了逻辑上的变化——这里的验证不会抛出异常。确实,你需要使用 if 语句来检查它。

    我怀疑是否发生了异常-无论如何您都需要捕获 linq2sql 异常,代码是正确的。此外,在“保存”或“添加”中,您很可能会遇到另一个问题 - 这是很常见的错误

    【讨论】:

    • 感谢您的回答,问题是我在项目早期使用的另一个尝试捕获,在我进行此验证之前。非常重要的关于 try catch 的一课,谢谢!
    【解决方案2】:

    编程规则 #1:catch 没有损坏(AKA:SELECT 没有损坏)。

    如果您确实有疑问,请打开“调试”菜单,选择“异常”,然后勾选“抛出”下的“公共语言运行时异常”框。这将导致调试器中断所有第一次机会异常。如果调试器在更新期间没有中断,那么一开始就不会抛出异常。

    完成后不要忘记取消勾选,因为在正常使用情况下,该行为会变得非常烦人。

    附: 永远不要捕获 System.Exception 捕获您知道可能实际抛出的特定类型的异常。

    【讨论】:

    • 每条规则都有一个例外。例如,对于 ThreadAbort 异常,finally 不会执行 :) 并且可能也 catch ......不记得确切
    • 感谢您的回答,打开异常处理对我来说可以更快地解决这个问题。对于未来来说,这是一件非常好的事情。谢谢!
    • @Sergey:这就是为什么你不应该试图抓住System.Exception。它也可能不会在OutOfMemoryException 上做你想做的事。 ;)
    【解决方案3】:

    你在另一个线程中做某事吗?这通常是未捕获异常的原因。

    【讨论】:

    • 不,没有线程发生。真的很奇怪,如果有帮助,我可以发布更多代码,但我只是不明白为什么在调用 nounRepository.save() 时它不会出错。我看着代码逐步执行所有的验证代码,然后它就到了 try 块的末尾。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多