有人能告诉我为什么名词模型中的问题不会被这个尝试捕获?
我现在已经尝试了两种不同的控制器方法,并且两次,即使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();
我宁愿不必以这种方式添加代码,因为它似乎是不必要的重复。
答案 0 :(得分:1)
你面对mvc的逻辑变化 - 验证这里不会抛出异常。实际上,您需要使用if语句进行检查。
我怀疑异常是否发生 - 无论如何你需要捕获linq2sql异常,代码是正确的。另外很有可能在“保存”或“添加”中你还有另一个问题 - 这是一个很常见的错误
答案 1 :(得分:1)
编程规则#1:catch
未被破坏(AKA:SELECT
未被破坏)。
如果您确实有疑问,请打开“调试”菜单,选择“例外”,然后在“投掷”下的“公共语言运行时例外”框中打勾。这将导致调试器在所有第一次机会异常时中断。如果调试器在更新期间没有中断,那么异常永远不会被抛出。
当你完成时不要忘记解开,因为在正常使用情况下行为会变得很烦人。
P.S。 永远不会捕获System.Exception
。捕获您知道可能实际抛出的异常的特定类型。
答案 2 :(得分:0)
你在另一个线程做某事吗?这通常是因为没有被捕获的原因。