我正处于Professional ASP.NET MVC 1.0书籍第1章中的“处理编辑错误”(第67页),我遇到了一个问题。
问题在于,当我正在编辑晚餐并且我点击保存时,它没有捕获任何表单错误,即使我将标题留空。 UpdateModel(晚餐)或dinnerRepository.Save()都不会抛出错误。
当我在保存后检查数据库时,标题字段确实为空。如何在不抛出错误的情况下发生这种情况?
任何帮助将不胜感激。编辑以下代码:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues)
{
Dinner dinner = dinnerRepository.GetDinner(id);
try
{
UpdateModel(dinner);
dinnerRepository.Save();
return RedirectToAction("Details", new { id = dinner.DinnerID });
}
catch
{
foreach (var issue in dinner.GetRuleViolations())
{
ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
}
return View(dinner);
}
}
发现问题 - 事实上,我的错误是N00B。我出于某些奇怪的原因注释了以下代码:
partial void OnValidate(ChangeAction action)
{
if (!IsValid)
throw new ApplicationException("Rule violations prevent saving");
}
难怪它没有抓住错误...... 感谢RememberMe试图提供帮助!我很感激。
答案 0 :(得分:0)
在您的模型中,您是否检查过这种情况?
public IEnumerable<RuleViolation> GetRuleViolations()
{
if (String.IsNullOrEmpty(title.Trim()))
yield return new RuleViolation("Dinner Title is required", "title");
yield break;
}
修改强> 看起来违规行为从未被添加,只是计算在内。试试这个:
if (ModelState.IsValid)
{
try
{
...
}
catch
{
ModelState.AddModelErrors(dinner.GetRuleViolations());
}
}
else
{
ModelState.AddModelErrors(dinner.GetRuleViolations());
}
答案 1 :(得分:0)
最后找到了本书的Wrox论坛有答案。答案实际上令人惊讶。它与Visual Studio 2010中的调试器有关。
基本上只需按F5继续,一切正常。
以下是论坛帖子的链接,其中包含更多答案: