如何在视图中获取错误集合?
我不想使用Html Helper验证摘要或验证消息.相反,我想检查错误,如果有任何显示特定格式.另外在输入控件上我想检查特定的属性错误并在输入中添加一个类.
PS我正在使用Spark View Engine,但这个想法应该是一样的.
所以我想我可以做点像......
DispalyErrorSummary() ....and also... ....
或类似的东西.
UPDATE
我的最终解决方案如下所示:
0}" id="Name" name="Name" />
如果此属性有错误,则仅添加错误css类.
<% ViewData.ModelState.IsValid %>
要么
<% ViewData.ModelState.Values.Any(x => x.Errors.Count >= 1) %>
对于特定的财产......
<% ViewData.ModelState["Property"].Errors %> // Note this returns a collection
要从ModelState中获取错误,请使用此Linq:
var modelStateErrors = this.ModelState.Keys.SelectMany(key => this.ModelState[key].Errors);
简明版@ ChrisMcKenzie的回答:
var modelStateErrors = this.ModelState.Values.SelectMany(m => m.Errors);
这将为您提供一个字符串,其中包含逗号分隔的所有错误
string validationErrors = string.Join(",", ModelState.Values.Where(E => E.Errors.Count > 0) .SelectMany(E => E.Errors) .Select(E => E.ErrorMessage) .ToArray());
谢谢乍得!为了显示与密钥相关的所有错误,这是我想出的.由于某种原因,基本Html.ValidationMessage帮助程序仅显示与该键关联的第一个错误.
<%= Html.ShowAllErrors(mykey) %>
的HtmlHelper:
public static String ShowAllErrors(this HtmlHelper helper, String key) { StringBuilder sb = new StringBuilder(); if (helper.ViewData.ModelState[key] != null) { foreach (var e in helper.ViewData.ModelState[key].Errors) { TagBuilder div = new TagBuilder("div"); div.MergeAttribute("class", "field-validation-error"); div.SetInnerText(e.ErrorMessage); sb.Append(div.ToString()); } } return sb.ToString(); }
从上面汇总了几个答案,这就是我最终使用的内容:
var validationErrors = ModelState.Values.Where(E => E.Errors.Count > 0) .SelectMany(E => E.Errors) .Select(E => E.ErrorMessage) .ToList();
validationErrors
最终是一个List
包含每个错误消息的。从那里开始,使用该列表即可轻松完成所需的操作。