Я столкнулся с проблемой, когда у меня есть простая форма добавления / редактирования и используется проверка на стороне клиента (jQuery / MicrosoftMvcJQueryValidation.js), которая генерируется из аннотаций данных и включается на стороне клиента, вызывая следующее на мой взгляд:
<% Html.EnableClientValidation(); %>
Похоже, что это нормально работает для большинства элементов, однако у меня есть экземпляр, где у меня есть логическое свойство, которое отображается как флажок с использованием:
<%= Html.EditorFor(model => model.Chargeable)%>
Что может быть истинным / ложным (отмечен / не отмечен).
Поскольку bool является типом значения и не может иметь значения NULL, он отображается как обязательное свойство и отображает ошибку (на стороне клиента), когда форма отправляется с надписью «Поле Chargeable обязательно». Однако, так как Сгенерированный HTML состоит из двух частей (как флажок, так и скрытое значение), он пройдет валидацию сообщения.
После просмотра исходного кода MVC 2 мне удалось на время добавить «быстрое и грязное» исправление, которое должно установить:
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
Кто-нибудь еще получил какие-либо идеи или предложения о том, как я могу обойти это?
IMO, я не думаю, что MVC должен устанавливать обязательный валидатор на стороне клиента для флажков, отображаемых с использованием методов Html.EditorFor / Html.CheckBox (For).
Примечание. Я использую ASP.NET MVC 2 RC2 и MicrosoftMvcJQueryValidation.js из соответствующего выпуска MVC Futures.