Добавить пользовательские связующие модели для производных объектов и их базы - PullRequest
2 голосов
/ 06 апреля 2010

Моя диаграмма классов:

BaseContentClass

  • Страница наследует BaseContentClass
  • Tab наследует BaseContentClass
  • ...

Если я сделаю это

ModelBinders.Binders.Add(typeof(BaseContentObject), new BaseContentObjectCommonPropertiesBinder());

тогда, когда в параметре действия контроллера появляется тип Tab, пользовательский связыватель модели не запускается.

Меня уволят, если я сделаю это:

ModelBinders.Binders.Add(typeof(Tab), new BaseContentObjectCommonPropertiesBinder());

Но я не хочу писать «n» количества операторов Add в моем global.asax.cs, чтобы связать все производные классы с моим пользовательским механизмом связывания модели, не так ли? Я не знаю, есть ли у меня другой вариант.

Ответы [ 2 ]

2 голосов
/ 06 апреля 2010

Попробуйте сделать это вместо этого. Я не проверял это, но я вполне уверен, что это будет работать.

[ModelBinder(typeof(BaseContentObjectCommonPropertiesBinder))]
public class BaseContentObject {}
2 голосов
/ 06 апреля 2010

Свойство ModelBinder.Binders имеет тип ModelBinderDictionary , который использует тип в качестве ключа. В результате он будет игнорировать регистрацию связывателя модели для базового класса. Читая эту статью из Los Techies Я думаю, что вы могли бы обойти это, определив атрибут связывателя для типа, см. Приоритет порядка в статье.

...