206

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

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

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

4

4 回答 4

360

我最终偶然发现了一个我正在寻找的用法示例- 通常将错误分配给模型,而不是它的属性之一,就像您通常所说的那样:

ModelState.AddModelError(string key, string errorMessage);

但使用一个空字符串作为键:

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

<%: Html.ValidationSummary() %>如您所料,错误消息将出现在 中。

于 2011-04-21T07:19:51.897 回答
28

您可以在模型的任何属性上添加模型错误,我建议如果没有与创建新属性相关的内容。

例如,我们检查电子邮件是否已在 DB 中使用,并将错误添加到操作中的 Email 属性中,因此当我返回视图时,他们知道存在错误以及如何使用

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

ModelState.AddModelError("Email", Resources.EmailInUse);
于 2011-04-21T04:12:07.447 回答
4

将模型点属性放在字符串中对我有用:ModelState.AddModelError("Item1.Month", "This is not a valid date");

于 2014-11-20T22:34:39.227 回答
0

尝试使用以下答案以获得一致的输出格式:- new ValidationProblemDetails()

if (!ModelState.IsValid) { 
ModelState.AddModelError("ErrorKey", "ErrorValue");
return BadRequest(new ValidationProblemDetails(this.ModelState));
}

输出格式:

{
    "errors": {
        "ErrorKey": [
            "ErrorValue"
        ]
    },
    "title": "One or more validation errors occurred.",
    "status": 400,
}
于 2022-01-31T07:16:44.530 回答