Обойти модели связывателей в asp.net MVC для сложных параметров действий? - PullRequest
0 голосов
/ 17 марта 2009

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

Мой сценарий такой: я использую Linq to SQL, но заставляю сгенерированные классы реализовывать интерфейсы. Например, IUser. Некоторые из моих действий контроллеров принимают параметры IUser, а некоторые из моих представлений связывают модели IUser, но я не хочу, чтобы средство связывания модели по умолчанию создавало его. Я использую Фильтры Действий для этого. Идея заключается в том, что если для действия требуются сведения о пользователе, фильтр действий получает их из базы данных, прежде чем вызывать действие.

Чтобы обойти ошибку, которая возникает, когда запускается DefaultModelBuilder, я создал механизм связывания нулевой модели, который просто возвращает ноль из CreateModel.

ModelBinderDictionary binders = System.Web.Mvc.ModelBinders.Binders;
binders[typeof(IUser)] = new NullModelBinder();

1 Ответ

0 голосов
/ 19 августа 2009

Не проще ли будет следовать архитектуре и создать механизм связывания IUser, который делает то, что делает ваш фильтр действий? В настоящее время вы извращаете фильтр действий, чтобы сделать что-то, для чего он не предназначен, и в процессе вы также проигнорировали точку расширения, разработанную специально для выполнения того, что вы пытаетесь достичь (создать экземпляр параметра определенным образом) .

Есть ли веская причина, по которой вы создаете IUser в фильтре действий, а не с помощью пользовательского связывателя?

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