Как мне обработать условную проверку в MVC3? - PullRequest
5 голосов
/ 07 ноября 2011

Я только изучаю MVC и не могу понять, как справиться со следующим сценарием. У меня есть форма с адресом доставки и адресом для выставления счета. Все поля обязательны для заполнения. Существует также флажок «Адрес для выставления счета совпадает с адресом доставки». Моя проблема в том, что состояние модели никогда не будет действительным, если оба адреса не заполнены. Я мог бы справиться с этим довольно легко с помощью некоторого javascript, который просто добавил значения из адреса доставки в поля адреса выставления счета, но если есть лучший способ справиться с этим, я хотел бы знать. Любая направляющая линия о том, как это обычно обрабатывается, была бы великолепна. Спасибо!

Ответы [ 2 ]

4 голосов
/ 07 ноября 2011

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

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

4 голосов
/ 07 ноября 2011

Вы можете сделать это, создав собственный атрибут проверки:

http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx

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

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

У этого парня также есть альфа-версия библиотеки, которую он пишет, чтобы сделать проверку MVC более гибкой. Сам не использовал, но вы можете попробовать .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...