ModelState.AddModelError - 如何添加不属于属性的错误?

时间:2011-04-21 04:00:30

标签: asp.net-mvc-2 asp.net-mvc-2-validation modelstate

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

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

...但我没有在Html.ValidationSummary中显示错误,这是我认为它们会出现的地方。我怀疑“模型”不是正确的关键,但我一直无法找到任何谷歌。

3 个答案:

答案 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");