2011-01-20 3 views
32

С MVC3 у вас есть два новых механизма для добавления пользовательской проверки. Это (1) подкласс ValidationAttribute или (2) реализует IValidatableObject.IValidatableObject в MVC3 - проверка на стороне клиента

ValidationAttribute позволяет добавлять проверку на стороне клиента относительно просто, реализуя IClientValidatable (и регистрируя новый адаптер и метод через jQuery).

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

Итак, вопрос в том, чего мне не хватает и как вы получаете проверку JS при использовании метода IValidatableObject?

ответ

23

Поскольку я не получил (действительный) ответ здесь, я спросил пару человек от Microsoft, и они подтвердили, что в настоящее время это невозможно.

Брэд Уилсон:

В это время, только валидаторы уровня собственности может испускать на стороне клиента проверки (как выстраивается гораздо лучше с идеей проверки ввода в виде браузера .. нет «модели», чтобы говорить , с точки зрения браузера).

Стюарт порей:

Я не верю, что вы можете подключить проверку клиента с IValidatableObject

+0

Означает ли это, что нет простого способа подключить пользовательскую проверку JavaScript в представлении? Я хотел бы иметь простую функцию, которую я мог бы подключить к существующему механизму проверки на стороне клиента. – pauloya

+0

[Сообщение на форуме ASP.NET] (http://forums.asp.net/post/5593598.aspx): * В настоящее время проверка jquery проверяет только поля ввода (без проверки уровня модели), поэтому нет естественного отображения для класса уровень проверки. Обычным способом добавления проверки уровня модели является добавление скрытого поля и проверка уровня модели карты на скрытый. * Http://stackoverflow.com/a/5817958/11683 демонстрирует этот подход - за исключением того, что поле не скрыто , – GSerg

+0

Использование атрибута [Remote] на модели может помочь; Подробнее читайте здесь: http://msdn.microsoft.com/en-us/library/gg508808%28VS.98%29.aspx – Tohid

4

http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx http://blogs.msdn.com/b/stuartleeks/archive/2010/07/28/asp-net-mvc-adding-client-side-validation-to-validatepasswordlengthattribute-in-asp- нетто-3 MVC-предпросмотр-1.aspx

ASP.NET MVC 3 Теперь чтит интерфейс IValidateObject когда модель связывания (в дополнение ко всем другим Валидация подходит к нему уже поддерживается с MVC 2), и будет получить ошибки проверки от него и автоматически помечать флаг/выделение полей с остроумием hin view с помощью встроенных помощников формы HTML .

ASP.NET MVC 3 также вводит новый IClientValidatable интерфейс, который позволяет ASP.NET MVC, чтобы обнаружить в выполнения, имеет ли валидатор поддержку для идентификации клиента. Этот интерфейс был спроектирован таким образом, чтобы он мог быть интегрирован с различными рамочными системами оценки . MVC 3 также представляет новый интерфейс IMetadataAware , который упрощает способ создания процесса создания ModelMetadata .

+2

Это все связано с добавлением проверки на стороне клиента для валидации атрибутов, которые, как я заявил в моем вопросе, работает очень хорошо. Я спрашиваю о добавлении проверки на стороне клиента в файл IValidatableObject. –

0

Этот способ article описывает способ доступа к объекту-контейнеру при проверке на стороне клиента в ASP.NET MVC. Вы можете использовать это, чтобы начать использовать свою собственную проверку на стороне клиента.

+1

Опять же, это связано с аннотациями данных и является специфичным для MVC2. Существует совершенно другой механизм добавления проверки на стороне клиента для проверки на основе атрибутов в MVC3 (IClientValidatable), который намного проще реализовать, чем старый подход DataAnnotationsModelValidator . ОДНАКО, я не говорю об атрибутах, я говорю о другом способе проверки MVC3: IValidatableObject. –

+0

@PaulHiles - Привет, Пол. Вы нашли что-нибудь подходящее для проверки на стороне клиента в mvc? –

Смежные вопросы