Asp.net MVC异常没有陷入try catch块

时间:2010-01-21 00:18:18

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

有人能告诉我为什么名词模型中的问题不会被这个尝试捕获?

我现在已经尝试了两种不同的控制器方法,并且两次,即使linq2sql不允许保存数据,代码也不会跳转到catch块。

我在跟踪中间看过名词对象,而isvalid属性为false,但是modelstate isvalid为true。无论哪种方式,代码都不会跳转到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();

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

3 个答案:

答案 0 :(得分:1)

你面对mvc的逻辑变化 - 验证这里不会抛出异常。实际上,您需要使用if语句进行检查。

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

答案 1 :(得分:1)

编程规则#1:catch未被破坏(AKA:SELECT未被破坏)。

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

当你完成时不要忘记解开,因为在正常使用情况下行为会变得很烦人。

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

答案 2 :(得分:0)

你在另一个线程做某事吗?这通常是因为没有被捕获的原因。