典型场景,发布到检查 ModelState.IsValid 的操作,如果是,则保存到数据库。验证规则设置为模型中的数据注释。
这是我的问题。我有一个不能超过 400 个字符的数据字段。数据注释以及客户端的 jQuery 验证强制执行此操作。
用户输入 395 个字符,包括一些换行符。我的应用程序将这些换行符变成 <br />
标签。但那是在 UpdateModel()
之后叫做。自 <br />
标签比换行符长,它通过了 UpdateModel 的验证,但在实际尝试保存到数据库时失败。
代码基本上是这样的(来自 NerdDinner):
[HttpPost, Authorize]
public ActionResult Edit(int id, FormCollection collection) {
Dinner dinner = dinnerRepository.GetDinner(id);
try {
UpdateModel(dinner, "Dinner");
dinner.Description = dinner.Description.Replace("\n", "<br />");
//... now it's over length limit
dinnerRepository.Save();
return RedirectToAction("Details", new { id=dinner.DinnerID });
}
catch {
return View(dinner);
}
}
引发异常时,不会填充数据注释中的 ModelState 规则违规,因此不会向我的用户显示任何消息。
处理这个问题有什么好方法吗?
最佳答案
您应该能够编写代码,例如...
if (TryUpdateModel(dinner, "Dinner")) {
dinner.Description = dinner.Description.Replace("\n", "<br />");
//... now it's over length limit
if (TryValidateModel(dinner)) {
dinnerRepository.Save();
return RedirectToAction("Details", new { id=dinner.DinnerID });
}
}
return View(dinner);
这消除了 try {} block 并允许您验证模型。
关于asp.net-mvc - 如何使用 ASP.NET MVC 2 的数据注释验证最好地处理后期数据验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3792452/