2012-02-08 2 views
1

Я пытаюсь выяснить, возможно ли то, что я хочу сделать, при отправке формы в контроллер.MVC3 Связывание свойства Object, которое наследуется от базового класса

Пусть мой класс:

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;} 
    } 

На странице, свойство Items будет сочетание «ребенка1» и объектов «Child2». Однако, когда я отправляю форму, поскольку свойство определяется как список «BaseObject» s, я получаю только поля, которые определены в «BaseObject».

Я изучил создание настраиваемого связующего объекта, но я не мог понять, возможно ли связать свойство объекта, чтобы я мог привязать Item [0] как Child1 и Item [1] и Item [2] as Child2. Я только видел способы дать всему объекту ObjectToBeBound определенный тип.

Я мог бы вручную назначить каждое свойство в настраиваемом связующем устройстве, но мне интересно, есть ли у меня более простой способ. Есть идеи?

ответ

0

Я думаю, вы можете использовать отражение, чтобы узнать тип объекта в списке, а затем вы можете применить к конкретному Ребенку. После того, как вы выбрали, вы должны иметь возможность использовать свойства дочернего объекта.

+0

Я могу узнать, какой тип объекта должен быть, но когда вы переопределяете DefaultModelBinder, вы получаете список свойств в форме, а не весь объект. Таким образом, ModelBindingContext будет иметь такие вещи, как ObjectToBeBound.Items [0] .ExtraField и ObjectToBeBound.Items [1] .OtherField – Kevin

Смежные вопросы