【问题标题】:Get all non-model errors from asp-validation-summary从 asp-validation-summary 获取所有非模型错误
【发布时间】:2018-08-10 12:46:53
【问题描述】:
据我所知,asp-validation-summary 可能是以下之一:
我想知道是否有任何可能的方法或技巧来获取所有 NonModel 错误,或者换句话说,所有通过 ModelState.AddModelError("custom", "some error who doesn't come from ValidationAttribute in the Model" );
【问题讨论】:
标签:
validation
razor
asp.net-core
【解决方案1】:
不,因为两者之间没有任何有意义的区别。 ModelState 是可枚举字符串的字典。没有关于该值中的特定键或值或项目来自何处的信息。
“模型”错误只是添加到空字符串键的错误,而“非模型”错误是其他任何错误。这就是你所拥有的。
【解决方案2】:
面临同样的问题。
我想在 Bootstrap 警报中就地显示字段错误和服务器端错误。
为了区分显式添加的错误,我将它们添加为前缀(在我的例子中是“#”):
ModelState.AddModelError("#SomeError", "Some error occured");
然后可以通过这种方式在视图/页面中过滤这些错误:
var explicitlyAddedErrors = Model
.Where(_ => _.Key.StartsWith("#"))
.SelectMany(_ => _.Value.Errors)
.ToList();
希望这对某人有用。 :)
【解决方案3】:
您可以将以下行添加到您通常放置 asp-validation-summary 的位置
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
第一个参数决定是否排除Property Errors。因为我已经有了 asp-validation-for = "PROPERTY",所以我把我的保留为 true;多次显示相同的错误消息是没有意义的。
第二个参数是显示错误信息的标题。例如:
@Html.ValidationSummary(true, "Errors", new { @class = "text-danger" })
Errors
* Invalid Login
“错误”仅在至少有一个错误时才会显示。
最后一个参数是不言自明的。
希望这会有所帮助! :)