Я сталкиваюсь следующий вопрос: https://github.com/aspnet/Mvc/issues/4989, и на основе «» rsheptolut комментарий сен 12, 2016 г., он нашел обходной путь (вставили для удобства):Как вы получаете ошибки в ModelState для определенного свойства?
<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 ([email protected])
{
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>
Мой вопрос с LINQ, чтобы получить переменная errors
. Я хочу отфильтровать их по имени свойства, поэтому список ошибок, перечисленных в элементе загрузки файлов, не будет содержать ошибок других элементов на странице. Я хочу сделать что-то вроде этого:
ViewData.ModelState.Values.Where(item => item.Key == "Images").Select...;
Однако LINQ не находит ключ в качестве действительного свойства класса ModelStateEntry. Справедливо. Но почему тогда, когда добавляются быстрые часы до ViewData.ModelState.Values
, появляется свойство Key?
Спасибо! Последний бит, что именно я искал. :) –
Как получить свойство (модели) модели, из-за которого 'ModelState.IsValid' является' false'? – barnes
@barnes. Вы можете использовать 'var errors = ModelState.Keys.Where (k => ModelState [k] .Errors.Count> 0). Выбрать (k => new {propertyName = k, errorMessage = ModelState [k] .Errors [0] .ErrorMessage}); ', в котором будут перечислены все свойства с ошибкой и связанное с ними сообщение об ошибке (но вы действительно должны задавать новый вопрос) –