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クラスにマップするようにモデルバインディングメカニズムに指示するにはどうすればよいですか?