2012-05-07 17 views
0

私はASP MVC 3プロジェクトで次のクラス階層を持っています。いくつかのエントリはコンテナを持つことができ、そのコンテナは内部にいくつかのコンテンツを持つことができます。コンテナクラスとコンテンツクラスは抽象クラスです。ASP MVC 3 ajax with json model with complex classへのバインド

Hierarchy

私は、ブラウザからJSONリクエストを受信し、エントリークラスの一種であるモデルにバインドする必要があります。問題は、DefaultModelBinderクラスがどのタイプのコンクリートコンテナであるべきかを知らなかったため、Entryモデルクラスを正しく作成できなかったことです。たとえば:

var dataaa = { Name: 'Some Name', Containers: [{ ContainerId: 0}] }; 
    $.ajax({ 
     url: 'Add', 
     type: "POST", 
     data: JSON.stringify(dataaa), 
     contentType: 'application/json; charset=utf-8', 
     success: function (data) { 
      alert('hello'); 
     }); 

+

[HttpPost] 
public string Add(Entry entry) 
{ 
    return "foo"; 
} 

次のリクエストは、サーバー例外につながる: は抽象クラスを作成することはできません。

{ Name: 'Some Name', Containers: [{ Type: 'FullContainer', ContainerId: 0}] }; 

方法FullContainerクラスに「FullContainer」に設定Typeフィールドを持ったオブジェクトをマッピングするためのメカニズムを結合モデルを指示する:私は、例えば、要求をJSONにTypeフィールドを追加することができますか?

答えて

0

エントリはビューモデルですか? Full Entryのタイプであっても、基本Entryに含まれるプロパティは投稿に十分ですか?ビューモデルではないが本当に必要なものなら、抽象的ではないEntryViewModelクラスを作成することをお勧めします。

それ以外の場合は、ダーリンの答えPolymorphic model bindingを確認してください。