2017-02-10 7 views
2

У меня есть следующие разметки в моих Create зрения для модели EmployeeBindingModel:MVC 6 жерех-проверка-резюме не включает имя свойства для проверки на скрытом вводе

<div asp-validation-summary="All" class="text-danger"></div> 
<input type="hidden" asp-for="EmployeeId" /> 

Если я оставлю глупую scaffolded Create действия как таковой, передает нулевую модель в представление, несмотря на то, что контроллер напечатан для EmployeeBindingModel. Затем при отправке проверка на стороне клиента не работает вообще, но это вопрос другого вопроса.

Этот вопрос заключается в том, почему валидация модели контроллера возвращает только следующее сообщение без имени свойства для EmployeeId?

The value '' is invalid. 
+0

И почему «The» в качестве синего в SO-рендеринге этого кода? – ProfK

+0

Проверка на стороне клиента по умолчанию не работает со скрытыми полями. JQuery значения по умолчанию говорят ignore: ": hidden". –

+0

@MaxMokrousov Почему бы не попробовать ответить на этот вопрос и, возможно, предложить, как изменить «игнорировать скрытые» значения по умолчанию? Я был бы очень готов принять его. – ProfK

ответ

1

Клиент значение по умолчанию для ignore hidden fields.

игнорирований (по умолчанию: ": скрытый") Тип: Селектор. Элементы, которые следует игнорировать при проверке, просто отфильтровывают их. Используется не-метод jQuery, поэтому все, что принято not(), можно передать как этот параметр. Входы типа submit и reset всегда игнорируются, поэтому отключены элементы

Чтобы исправить это, вы можете переопределить.

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
     <script type="text/javascript"> 
     $.validator.setDefaults({ 
      ignore: "" 
     }); 
     </script> 
} 
+0

Спасибо, это может быть очень полезно. Хотя, как и ваш код будет игнорировать все, кроме элементов 'submit' и' reset'. Хотя значение ignore является селектором, поэтому я могу использовать классы для более селективного. – ProfK

0

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

<input type="hidden" name="EmployeeId" asp-for="EmployeeId" /> 

Если вы хотите использовать бритву, вы можете использовать следующие: Проверка на стороне JQuery

@Html.HiddenFor(model => model.EmployeeId) 
+0

Я использовал Razor, современную версию, то есть MVC 6, ASP.NET Core, где '' означает то же самое, что и '@ Html.HiddenFor (модель => model.EmployeeId) '. – ProfK

+1

А я вижу, извиняюсь. Не знал этого. –

+0

Получите время, Крис. :-) Жемчужиной, которая является MVC Core, делает MVC 5 похожим на мяч навоза. Все это бесплатно и с открытым исходным кодом, даже требуемые IDE бесплатны. – ProfK