Атрибуты проверки на стороне клиента для скрытых, радио, выпадающих элементов по умолчанию в asp.net mvc 3 - PullRequest
1 голос
/ 04 ноября 2011

Я использую 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="&amp;#39;Id&amp;#39; must not be empty." data-val-number="The field Id must be a number." data-val="true">

Проверка работает, потому что скрытый элемент всегда имеет значение, но у меня проблема с переключателями.Например, если я не хочу, чтобы одна радиокнопка всегда была выбрана по умолчанию, но была пуста, и если я хочу поместить правила проверки для этого элемента, рендеринг помещает атрибуты проверки по умолчанию и поверх моих правил, так что это испортилосьи проверка не работает должным образом ...

Кто-нибудь имел подобные проблемы или знает об этом, или я должен извлечь источник ASP.NET MVC и найти его самостоятельно?:)

Полу-ленивый и немного сдвинутый по срокам кодер

Edit :

Я попробовал предлагаемое решение по этой ссылке:

Свободные проверки.Ошибка: Имена типов проверки в ненавязчивых правилах проверки клиента должны быть уникальными

, но asp.net mvc выдает обязательные атрибуты для каждого поля независимо от параметров AddImplicitRequiredAttribute ...

1 Ответ

6 голосов
/ 04 ноября 2011

Сделайте свойство Id в вашей модели представления обнуляемым целым числом.

Так что вместо:

public int Id { get; set; }

вы должны использовать:

public int? Id { get; set; }

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

Html-помощники автоматически генерируют атрибуты data-val для всех типов, не допускающих значения NULL, что разработано, и если вы не хотите использовать это поведение, вам придется написать свои собственные HTML-помощники для создания полей ввода и раскрывающихся списков. Вы больше не можете полагаться на помощников TextBoxFor и DropDownListFor, так как они разработаны.

...