ModelState.AddModelError – 如何添加一个不属性的错误?

我在Create(FooViewModel fvm){...}检查我的数据库以查看fvm.prop1fvm.prop2已经存在于该组合中; 如果是这样,我想向模型状态添加一个错误,然后返回整个视图。 我试过了:

 public ActionResult Create(FooViewModel fvm){ if (ThatComboAlreadyExists(fvm)) { ModelState.AddModelError("Model", "There is already one like that"); return View(fvm); } } 

…但是我在validation摘要中没有显示错误,这是我认为会出现的地方。 我怀疑“模型”不是正确的关键,但我一直没能find任何Google的东西。

我最终偶然发现了一个我正在寻找的用法的例子 – 为模型分配一个一般的错误,而不是像以前那样调用它的属性之一:

 ModelState.AddModelError(string key, string errorMessage); 

但是使用空string作为键:

 ModelState.AddModelError(string.Empty, "There is something wrong with Foo."); 

错误消息将出现在您所期望的<%: Html.ValidationSummary() %>中。

你可以在你的模型的任何属性上添加模型错误,我build议如果没有什么相关的创build一个新的属性。

作为例子,我们检查电子邮件是否已经在数据库中使用,并将错误添加到动作中的电子邮件属性,所以当我返回视图时,他们知道有一个错误,以及如何通过使用

 <%: Html.ValidationSummary(true)%> <%: Html.ValidationMessageFor(model => model.Email) %> 

 ModelState.AddModelError("Email", Resources.EmailInUse); 

将模型点属性放在string中: ModelState.AddModelError("Item1.Month", "This is not a valid date");