Атрибуты проверки на стороне клиента для скрытых, радио, выпадающих элементов по умолчанию в asp.net mvc 3
Я использую ASP.NET MVC 3 + FLUENT VALIDATION + NINJECT
У меня есть модель X и правила для этой модели примерно такие:
RuleFor(c => c.FirstName).NotEmpty();
RuleFor(c => c.LastName).NotEmpty();
Я заметил несколько странную вещь: движок помещает атрибуты проверки на все скрытые элементы, а также на выпадающие списки, переключатели и т. Д., И я не указал это в конфигурации проверки для этой модели, так что я думаю, что это по умолчанию...
<input type="hidden" value="1" name="Id" id="Id" data-val-required="&#39;Id&#39; must not be empty." data-val-number="The field Id must be a number." data-val="true">
Проверка работает, потому что скрытый элемент всегда имеет значение, но у меня проблема с переключателями. Например, если я не хочу, чтобы одна радиокнопка всегда была выбрана по умолчанию, но была пуста, и если я хочу поместить правила проверки в этот элемент, рендеринг помещает атрибуты проверки по умолчанию и поверх моих правил, так что это испортилось и проверка не работает должным образом...
Кто-нибудь имел подобные проблемы или знает об этом, или я должен вытащить источник ASP.NET MVC и найти его самостоятельно?:)
Полу-ленивый и немного сдвинутый по срокам кодер
Редактировать:
Я попробовал предложенное решение по этой ссылке:
Свободные проверки. Ошибка: имена типов проверки в ненавязчивых правилах проверки клиентов должны быть уникальными
но asp.net mvc выдает обязательные атрибуты для каждого поля независимо от настроек AddImplicitRequiredAttribute...
1 ответ
Сделать Id
Свойство по вашему мнению моделирует обнуляемое целое число.
Так что вместо:
public int Id { get; set; }
вы должны использовать:
public int? Id { get; set; }
То же самое относится и к любым другим типам значений, которые вам не нужны. Вы должны использовать обнуляемые типы.
Помощники HTML автоматически испускают data-val
атрибуты для всех ненулевых типов, которые разработаны специально, и если вы не хотите этого поведения, вам придется написать свои собственные HTML-помощники, чтобы сгенерировать поля ввода и выпадающие списки. Вы больше не можете полагаться на помощников TextBoxFor и DropDownListFor, так как они разработаны.