2

我的班级图:

基本内容类

  • 页面继承 BaseContentClass
  • Tab 继承 BaseContentClass
  • ...

如果我这样做

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

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

如果我这样做,它会被解雇:

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

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

4

2 回答 2

2

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

[ModelBinder(typeof(BaseContentObjectCommonPropertiesBinder))]
public class BaseContentObject {}
于 2010-04-06T16:05:09.967 回答
2

ModelBinders.Binders属性属于ModelBinderDictionary类型,它使用该类型作为键。结果,它将忽略您为基类注册模型绑定器。阅读Los Techies 的这篇文章,我认为您可以通过在类型上定义一个 binder 属性来解决这个问题,请参阅文章中的 order priority。

于 2010-04-06T15:23:38.337 回答