Обязательный атрибут для типа значения bool при использовании в качестве флажка - PullRequest
5 голосов
/ 05 февраля 2010

Я столкнулся с проблемой, когда у меня есть простая форма добавления / редактирования и используется проверка на стороне клиента (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.

1 Ответ

5 голосов
/ 05 февраля 2010

Полагаю, что самый простой способ справиться с этим - вызвать функцию правил ("удалить", [правила]) для элементов (в основном, флажков), из которых я хочу удалить проверку на стороне клиента:

<script type="text/javascript">
  $(document).ready(function() {
    $('#Chargeable').rules('remove', 'required');
  });
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...