Фон
У меня есть страница оплаты, где пользователь может выбрать из списка существующих способов оплаты или указать новый.В раскрывающемся списке представлены такие параметры, как:
- Visa - ****** 1234 (сохранено)
- Mastercard - ****** 9876 (сохранено)
- [Новая кредитная карта ...]
- [Новая электронная проверка ...]
Используя jQuery, я переключаю скрытые DIV, которые содержат либо информационную таблицу (в случае вариантов 1 или 2 для сохраненных способов оплаты), либо форму (в случае [новых] опций).
Я использую строго типизированный класс в качестве модели представления, которая содержит (среди простых типов) класс CreditCard и класс Check.Каждый из этих классов использует валидаторы аннотаций данных, так как они используются в других частях сайта.
Проблема
Проблема возникает, когда пользователь отправляет форму.Я хотел бы использовать привязку модели для обработки сопоставления значений POST, но мне нужно привязку и / или проверку для запуска в зависимости от того, какую опцию выбрал пользователь.Например, если пользователь выбирает вариант 1 или 2 из списка выше, я не хочу запускать проверку модели (или, возможно, даже саму привязку) для объектов CreditCard или Check.
Я исследовал возможности создания пользовательского связывателя модели с использованием IModelBinder, а также расширения DefaultModelBinder и переопределения некоторых методов.Тем не менее, я не уверен, какой метод лучше, и, если расширить DefaultModelBinder, какой метод будет подходящим для переопределения.
Логика будет довольно простой:
- Еслипользователь выбрал один из существующих способов оплаты, проверка кредитной карты или чека не требуется.
- Если пользователь выбрал один из вариантов создания нового метода оплаты, то только выбранный метод (CreditCard или чек)) должен быть связан и проверен
Такое ощущение, что расширение DefaultModelBinder - это то, что нужно, так как я бы хотел, чтобы большая часть тяжелой работы выполнялась фреймворком без необходимости создаватьпользовательские связующего с нуля.Однако, глядя на доступные методы для переопределения, не ясно, какой из них является лучшим:
- BindProperty - проблема здесь в том, что мне нужно взглянуть на одно из свойств, чтобыопределить, какие другие свойства должны быть связаны.Я не думаю, что смогу контролировать порядок, в котором связаны входящие свойства, и я не хотел бы полагаться на порядок, который они задают в форме HTML.
- OnModelUpdated - на данный момент этопоздно.Проверка привязки по аннотациям данных была запущена, а ModelState обновлен.Я должен был бы пройти через ModelState и удалить ошибки, которые не имеют отношения к делу.
- OnPropertyValidating - Сначала я думал, что это то место, где я должен искать, но даже возвращение TRUE для всех свойств (в качестве теста) приводит к тому, что ModelState содержит ошибки привязки.
У меня естьнатолкнулся на этот сценарий в других аспектах приложения и решил разделить функциональность на отдельные контроллеры / действия, чтобы упростить процесс.Однако я хотел бы лучше понять, как решать более сложные проблемы пользовательского интерфейса, особенно связанные с функциями привязки модели MVC.
Любая помощь по этому вопросу будет принята с благодарностью.
Все возможные значения хранятся в раскрывающемся списке.Используя jQuery, я переключаю форму (для нового метода оплаты) и отображение (для существующего метода)