为派生对象及其基础添加自定义模型绑定器

时间:2010-04-06 14:21:44

标签: asp.net-mvc modelbinders

我的班级图:

BaseContentClass

  • Page继承BaseContentClass
  • Tab继承BaseContentClass
  • ...

如果我这样做

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

然后当出现类型Tab的控制器动作参数时,不会触发自定义模型绑定器。

如果我这样做会被解雇:

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

但是我不想在我的global.asax.cs中编写“n”个Add语句来将所有派生类与我的自定义模型绑定器关联起来,是吗?我不知道我是否有其他选择。

2 个答案:

答案 0 :(得分:2)

ModelBinders.Binders property属于ModelBinderDictionary类型,它使用该类型作为键。因此,它将忽略您为基类注册模型绑定器。阅读此article from Los Techies我认为你可以通过在类型上定义一个binder属性来解决这个问题,请参阅文章中的顺序优先顺序。

答案 1 :(得分:2)

尝试这样做。我没有测试过,但我相当肯定它会起作用。

[ModelBinder(typeof(BaseContentObjectCommonPropertiesBinder))]
public class BaseContentObject {}