wes*_*and 8 .net c# linq asp.net-mvc asp.net-core
我遇到了以下问题:https://github.com/aspnet/Mvc/issues/4989,并根据2016年9月12日的'rsheptolut'评论,他发现了这种解决方法(为方便起见粘贴):
<form class="form-horizontal" asp-antiforgery="true">
<fieldset>
// 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);
<div class="alert alert-danger">
<span>@Localizer["There are problems with your input:"]</span>
<ul>
@foreach (var error in errors)
{
<li>@error</li>
}
</ul>
</div>
}
// Some actual fields. Don't forget validation messages for fields if you need them (@Html.ValidationMessage)
</fieldset>
</form>
Run Code Online (Sandbox Code Playgroud)
我的问题是LINQ获取errors变量.我想通过属性的名称过滤这些,因此我的文件uploads元素下列出的错误列表将不包含页面上其他元素的错误.我想做这样的事情:
ViewData.ModelState.Values.Where(item => item.Key == "Images").Select...;
Run Code Online (Sandbox Code Playgroud)
但是,LINQ找不到Key作为ModelStateEntry类的有效属性.很公平.但是,为什么在添加快速监视时ViewData.ModelState.Values,Key属性会出现?
小智 10
假设你想要错误的错误 Name
string propertyName = "Name";
Run Code Online (Sandbox Code Playgroud)
要获得第一个错误(使用时将显示的内容@Html.ValidationSummary(),您可以使用
string error = ViewData.ModelState.Keys.Where(k => k == propertyName)
.Select(k => ModelState[k].Errors[0].ErrorMessage).First();
Run Code Online (Sandbox Code Playgroud)
或获取财产的所有错误
IEnumerable<string> errors = ModelState.Keys.Where(k => k == propertyName)
.Select(k => ModelState[k].Errors).First().Select(e => e.ErrorMessage);
Run Code Online (Sandbox Code Playgroud)
并使用您foreach在问题中提到的
| 归档时间: |
|
| 查看次数: |
5772 次 |
| 最近记录: |