0

У меня есть этот ViewModel:Почему моя сводка валидации не отображается?

public class PersonBindingModel 
{ 
    public int Id { get; set; } 
    [Required] 
    public string LastName { get; set; } 
    public string FirstName { get; set; } 
    public int Age { get; set; } 
} 

и соответствующая часть Create зрения scaffolded для него с помощью стандартных пакетов .NET Ключевых и EF Core:

<form asp-action="Create"> 
    <div class="form-horizontal"> 
     <h4>PersonBindingModel</h4> 
     <hr /> 
     <div asp-validation-summary="ModelOnly" class="text-danger"></div> 
     <div class="form-group"> 
      <label asp-for="LastName" class="col-md-2 control-label"></label> 
      <div class="col-md-10"> 
       <input asp-for="LastName" class="form-control" /> 
       <span asp-validation-for="LastName" class="text-danger"></span> 
      </div> 
     </div> 
    </div> 
    ... 
    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" value="Create" class="btn btn-default" /> 
     </div> 
    </div> 
</form> 

Тем не менее, когда я опускаю требуемый LastName, Я получаю сообщение подтверждения только под этим вводом, а сводка валидации вообще не отображается. Во всех других формах моего проекта отображается сводка, а также сообщение под входом LastName. Это оказывается форма:

<form action="/persons/Create" method="post"> 
    <div class="form-horizontal"> 
     <h4>PersonBindingModel</h4> 
     <hr> 

     <div class="form-group"> 
      <label class="col-md-2 control-label" for="LastName">LastName</label> 
      <div class="col-md-10"> 
       <input class="form-control input-validation-error" type="text" data-val="true" data-val-required="The LastName field is required." id="LastName" name="LastName" value=""> 
       <span class="text-danger field-validation-error" data-valmsg-for="LastName" data-valmsg-replace="true">The LastName field is required.</span> 
      </div> 
     </div> 
     ... 
     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Create" class="btn btn-default"> 
      </div> 
     </div> 
    </div> 
    ... 
</form> 

Я опустил проверки на сторону клиента, то есть _ValidationScriptsPartial, как я тестирование модели связывания стороны контроллера проверки вместе с я добавил нерелевантным пользовательскую проверкой. Форма делает то же самое с пользовательской проверкой или без нее.

В оказанной HTML, вы можете ясно видеть недостающее LastName сгенерировал ошибку ModelState, и я всегда был под впечатлением, что в такой форме, как это, до тех пор, как ModelState содержит ошибки модели, то есть один с именами входных как ключи, должна отображаться сводка валидации. Почему не так?

+0

Вы пробовали с 'АСП-проверки-резюме =«Все» '? –

+0

@StephenMuecke. Все опции 'All' включают в себя сообщения, которые вы добавляете с пустыми ключами имен свойств. Я действительно хочу знать, почему он не показывает мои ошибки с действительными ключами, поэтому меня интересует только 'ModelOnly'. Но я все равно попробую, спасибо. – ProfK

+0

'asp-validation-summary =" Все "' равнозначно '@ Html.ValidationSummary (false)' и 'asp-validation-summary =" ModelOnly "' равно значению '@ Html.ValidationSummary (true)' –

ответ

0

В данном конкретном случае я думаю, что это способ добавления ошибки в «ModelState»

ModelState.AddModelError(string.Empty, x.Description) 

Обратите внимание, что Key является пустой строкой, это как «ModelOnly» знает что это не ошибка свойства.

Если у вас есть что-нибудь другое, чем пустая строка будет рассчитывать как ошибка собственности, и будет отображаться только в режиме «ALL»

+0

У меня есть оба типа ошибок, с ключами и с ключами '' '' (не совсем 'String.Empty', но он обычно работал до этого). В этом случае он ничего не отображает для какой-либо комбинации моделей и немодельных ошибок. – ProfK

Смежные вопросы