2012-02-08 8 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プロパティには、「CHILD1」と「CHILD2」オブジェクトのミックスになります。しかし、私がフォームを投稿すると、プロパティは "BaseObject"のリストとして定義されているので、 "BaseObject"で定義されているフィールドだけを取得します。

私はカスタムモデルバインダーの作成を検討しましたが、オブジェクトのプロパティを具体的にバインドできるかどうかわかりませんでしたので、Item [0]をChild1、Item [1]とItem [2] Child2。私は "ObjectToBeBound"オブジェクト全体に特定の型を与える方法しか見ていませんでした。

私は手動でカスタムモデルバインダーの各プロパティを割り当てることができましたが、簡単な方法がないかと思います。何か案は?

答えて

0

私は、リフレクションを使用してリスト内のオブジェクトのタイプを調べ、特定の子にキャストできると思います。 キャストの後、子オブジェクトのプロパティを使用できるはずです

+0

オブジェクトの種類はわかりますが、DefaultModelBinderをオーバーライドすると、オブジェクト全体ではなくフォーム内のプロパティのリストが取得されます。したがって、ModelBindingContextはObjectToBeBound.Items [0] .ExtraFieldとObjectToBeBound.Items [1] .OtherFieldのようなものを持ちます – Kevin

関連する問題