C# MVC3绑定从基类继承的对象属性

C# MVC3绑定从基类继承的对象属性,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我试图找出在向控制器发布表单时我想做的事情是否可行 假设我的班级: public class ObjectToBeBound { public int Id {get;set;} public List<BaseObject> Items {get;set;} } public class Child1 : BaseObject { public string ExtraField {get;set;} }

我试图找出在向控制器发布表单时我想做的事情是否可行

假设我的班级:

    public class ObjectToBeBound {
      public int Id {get;set;}
      public List<BaseObject> Items {get;set;}
    }

    public class Child1 : BaseObject {
     public string ExtraField {get;set;}
     }

    public class Child2 : BaseObject {
     public string OtherField {get;set;}
     }
公共类ObjectToBound{
公共int Id{get;set;}
公共列表项{get;set;}
}
公共类Child1:BaseObject{
公共字符串外部字段{get;set;}
}
公共类Child2:BaseObject{
公共字符串OtherField{get;set;}
}
在页面上,Items属性将混合使用“Child1”和“Child2”对象。但是,当我发布表单时,由于属性被定义为“BaseObject”的列表,所以我只获取在“BaseObject”上定义的字段

我研究了如何创建自定义模型绑定器,但无法确定是否可以专门绑定对象的属性,以便将项[0]绑定为Child1,将项[1]和项[2]绑定为Child2。我只看到了为整个“ObjectToBound”对象指定特定类型的方法


我可以在自定义模型活页夹中手动指定每个属性,但我想知道是否有一种更简单的方法我遗漏了。有什么想法吗?

我想你可以使用反射来找出列表中对象的类型,然后你可以对特定的子对象进行强制转换。
在强制转换之后,您应该能够使用子对象属性

我可以找出对象应该是什么类型,但是当您覆盖DefaultModelBinder时,您会得到表单中的属性列表,而不是整个对象。因此ModelBindingContext将具有类似ObjectToBound.Items[0].ExtraField和ObjectToBound.Items[1].OtherField的内容