0

ASPMVC3プロジェクトで次のクラス階層があります。一部のエントリにはコンテナを含めることができ、そのコンテナにはコンテンツを含めることができます。コンテナクラスとコンテンツクラスは抽象クラスです。

階層

ブラウザからjsonリクエストを受け取り、それをEntryクラスのタイプであるモデルにバインドする必要があります。問題は、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";
}

次のリクエストはサーバー例外につながります: 抽象クラスを作成できません。たとえば、タイプフィールドをjsonリクエストに追加できます。

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

Typeフィールドが'FullContainer'に設定されたオブジェクトをFullContainerクラスにマップするようにモデルバインディングメカニズムに指示するにはどうすればよいですか?

4

2 に答える 2

0

エントリーはビューモデルですか?フルコンテナタイプの場合でも、ベースエントリに含まれるプロパティは投稿に十分ですか?ビューモデルではないが、本当に必要なのはそれだけの場合EntryViewModelは、抽象的ではないクラスを作成することをお勧めします。

それ以外の場合は、ここでダリンの答えをチェックしてください。ポリモーフィックモデルバインディング

于 2012-05-07T21:42:14.190 に答える
0

hompageに回答を投稿しました。

于 2012-10-11T10:25:14.300 に答える