我遇到了一种情况,我想Html.ValidationSummary()
在我的视图中使用它来显示一般错误消息。也许类似"There was a problem with the information you entered."
但没有得到每件出错的事情的列表(根据 DataAnnotations)。
旁注:我发现人们if(ViewContext.ViewData.ModelState.IsValid){ ... }
在他们的观点和上述观点中都使用了参考资料ValidationSummary
。至少可以说,我对这种方法并没有留下深刻的印象。
重要的是,ModelStateDictionary
仍然包含每个具有验证错误的模型元素的键(以便Html.EditorFor
等人编写正确的 css 类。)
我最终得到并且似乎有效的是:
public static class ModelStateHelpers
{
public static void Empty(this ModelStateDictionary @this)
{
foreach (KeyValuePair<string, ModelState> state in @this)
{
if (state.Value.Errors.Any())
{
state.Value.Errors.Clear();
state.Value.Errors.Add(String.Empty);
}
}
}
}
在我的课堂上紧随其后:
if (StuffWentWrong) {
this.ModelState.Empty();
this.ModelState.AddModelError("", "Something went wrong...");
}
正如预期的那样,Html.ValidationSummary
它足够聪明,可以ModelStates
在错误消息为空白的字典中抑制 html 结构;最后我还得到了带有错误验证属性的文本字段,例如<input class="input-validation-error text-box single-line" data-val="true" data-val-required="The User Name field is required." id="UserName" name="UserName" type="text" value="" />
这种特殊的解决方案闻起来难闻吗?