代码之家  ›  专栏  ›  技术社区  ›  mare

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

  •  2
  • mare  · 技术社区  · 15 年前

    我的类图:

    基本内容类

    • 页继承BaseContentClass
    • 选项卡继承BaseContentClass

    如果我这样做

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

    然后,当“类型”选项卡的“控制器操作”参数出现时,不会激发自定义模型绑定器。

    如果我这样做就会被解雇:

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

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

    2 回复  |  直到 15 年前
        1
  •  2
  •   Jab    15 年前

    试着这样做。我还没有测试过,但我很确定它会起作用。

    [ModelBinder(typeof(BaseContentObjectCommonPropertiesBinder))]
    public class BaseContentObject {}
    
        2
  •  2
  •   Richard McGuire    15 年前

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

    推荐文章