当前位置:  开发笔记 > 编程语言 > 正文

对于特定属性,如何在ModelState中获得错误?

如何解决《对于特定属性,如何在ModelState中获得错误?》经验,为你挑选了1个好方法。

我遇到了以下问题:https://github.com/aspnet/Mvc/issues/4989,并根据2016年9月12日的'rsheptolut'评论,他发现了这种解决方法(为方便起见粘贴):

// All of this instead of @Html.ValidationSummary(false) due to a bug in ASP.NET Core 1.0 @if (!@ViewData.ModelState.IsValid) { var errors = ViewData.ModelState.Values.Select(item => item.Errors.FirstOrDefault()?.ErrorMessage).Where(item => item != null);
@Localizer["There are problems with your input:"]
    @foreach (var error in errors) {
  • @error
  • }
} // Some actual fields. Don't forget validation messages for fields if you need them (@Html.ValidationMessage)

我的问题是LINQ获取errors变量.我想通过属性的名称过滤这些,因此我的文件uploads元素下列出的错误列表将不包含页面上其他元素的错误.我想做这样的事情:

ViewData.ModelState.Values.Where(item => item.Key == "Images").Select...;

但是,LINQ找不到Key作为ModelStateEntry类的有效属性.很公平.但是,为什么在添加快速监视时ViewData.ModelState.Values,Key属性会出现?



1> 小智..:

假设你想要错误的错误 Name

string propertyName = "Name";

要获得第一个错误(使用时将显示的内容@Html.ValidationSummary(),您可以使用

string error = ViewData.ModelState.Keys.Where(k => k == propertyName)
    .Select(k => ModelState[k].Errors[0].ErrorMessage).First();

或获取财产的所有错误

IEnumerable errors = ModelState.Keys.Where(k => k == propertyName)
    .Select(k => ModelState[k].Errors).First().Select(e => e.ErrorMessage);

并使用您foreach在问题中提到的


@barnes.你可以使用`var errors = ModelState.Keys.Where(k => ModelState [k] .Errors.Count> 0).选择(k => new {propertyName = k,errorMessage = ModelState [k] .Errors [0] .ErrorMessage});`它将列出所有有错误的属性,以及相关的错误消息(但你真的应该问一个新问题)
推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有