我正在Create(FooViewModel fvm){...}
检查我的数据库,看看该组合中是否已存在fvm.prop1
和fvm.prop2
;如果是这样,我想向modelstate添加一个错误,然后返回整个视图。我试过了:
public ActionResult Create(FooViewModel fvm){
if (ThatComboAlreadyExists(fvm)) {
ModelState.AddModelError("Model", "There is already one like that");
return View(fvm);
}
}
...但我没有在Html.ValidationSummary
中显示错误,这是我认为它们会出现的地方。我怀疑“模型”不是正确的关键,但我一直无法找到任何谷歌。
答案 0 :(得分:297)
我最终偶然发现an example我正在寻找的用法 - 通常会给模型分配一个错误,而不是其中一个属性,就像往常一样:
ModelState.AddModelError(string key, string errorMessage);
但是为密钥使用空字符串:
ModelState.AddModelError(string.Empty, "There is something wrong with Foo.");
错误消息将出现在<%: Html.ValidationSummary() %>
中,正如您所期望的那样。
答案 1 :(得分:26)
您可以在模型的任何属性上添加模型错误,我建议是否与创建新属性无关。
作为示例,我们检查电子邮件是否已在DB中使用,并将错误添加到操作中的Email属性,因此当我返回视图时,他们知道存在错误以及如何使用< / p>
<%: Html.ValidationSummary(true)%>
<%: Html.ValidationMessageFor(model => model.Email) %>
和
ModelState.AddModelError("Email", Resources.EmailInUse);
答案 2 :(得分:1)
将模型点属性放在字符串中对我有用:ModelState.AddModelError("Item1.Month", "This is not a valid date");