模型状态。AddModelError -我如何添加一个属性为n't的错误?

我正在检查我的数据库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中显示错误,这是我假设它们会出现的地方。我怀疑“模型”不是正确的钥匙,但我还没有找到任何东西。

181977 次浏览

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

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

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

而且

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

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

ModelState.AddModelError(string key, string errorMessage);

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

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

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

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

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

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