我正在检查我的数据库在创建(FooViewModel fvm){…}来查看fvm. conf文件。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,这是我假设它们将出现的地方。我怀疑“模型”不是正确的钥匙,但我还没有找到任何东西。


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

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

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

and

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

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

ModelState.AddModelError(string key, string errorMessage);

但是使用空字符串作为键:

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

错误消息将显示在<%:Html.ValidationSummary() %>中,正如您所期望的那样。


将model .属性放在字符串中对我来说是有效的:月”,“这不是有效日期”);


尝试使用以下答案以获得一致的输出格式:

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,
}