MVC 3 - установить необязательные поля на обязательные на стороне клиента

Я создаю приложение MVC 3.

Могу ли я сделать необязательные поля обязательными на стороне клиента (используя JavaScript/jQuery)?

Мне нужно, чтобы это было динамически, когда что-то меняется на странице.

ОБНОВЛЕНИЕ: я просмотрел исходный код своей страницы и увидел массив window.mvcClientValidationMetadata, в который вставляются правила проверки. Могу ли я использовать его для своих нужд?

Спасибо


person Yair Nevet    schedule 05.08.2012    source источник


Ответы (2)


Вы можете делать все, что хотите, на стороне клиента.

Вы можете подключиться к событию отправки формы и в нем проверить, заполнено ли поле или нет, и либо отправить форму, либо отобразить сообщение об ошибке по мере необходимости.

Конечно, если JavaScript отключен или если пользователь достаточно знает, это поле может оказаться незаполненным, поэтому всегда проверяйте на стороне сервера (в дополнение к Model.IsValid вы можете добавить проверки для полей, которые вы специально не добавили RequiredAttribute к).

Другой альтернативой, если ваша логика проверки сложна, является переопределение ModelMetadata для обеспечения пользовательской проверки.

person Oded    schedule 05.08.2012
comment
Зачем это делать, если я могу использовать встроенный скрипт API проверки на стороне клиента MVC? - person Yair Nevet; 05.08.2012
comment
@YairNevet - Вы только что заявили, что это поле не требуется. Я понимаю, что это означает, что на вашей модели не будет RequiredAttribute. Конечно, если вы хотите, добавьте этот атрибут к свойству модели, и все готово. - person Oded; 05.08.2012
comment
Поле должно быть обязательным только в некоторых случаях, а не в инициализированном состоянии. - person Yair Nevet; 05.08.2012
comment
@YairNevet - вот почему вам нужна пользовательская логика. Вы не можете добавить RequiredAttribute, который иногда будет применяться, а иногда нет. - person Oded; 05.08.2012
comment
Вот почему мне это нужно на стороне клиента. - person Yair Nevet; 05.08.2012
comment
Что по-прежнему является пользовательской логикой. Вы можете добавить атрибуты data-*, которые используют плагины проверки. Но вам нужно добавить их условно (опять же, пользовательская логика). - person Oded; 05.08.2012
comment
давайте продолжим это обсуждение в чате - person Yair Nevet; 05.08.2012