JSONオブジェクトのリストをコントローラーメソッドに渡そうとしています。コントローラーに正しいタイプが自動的に定義され、入力されます。
コントローラに投稿されたJSON:
{ Type : 'Image', ImageName : 'blah.jpg' },
{ Type : 'Text', Text: 'Hello', Font: 'Some Font' }..
コントローラー:
public ActionResult SaveCOntent(IList<Item> content)
したがって、私が得た印象は、ModelBindingを使用して要素を正しい型に変換する必要があるということです。私は別の提案された投稿(http://stackoverflow.com/questions/6484972/viewmodel-with-listbaseclass-and-editor-templates)をフォローしようとしましたが、これはある意味で機能します。正しいタイプのリストを取得します。 'ただし、すべてのプロパティはデフォルトに設定されており、入力されていません。
DefaultModelBinderを次のように拡張してみました。
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var typeName = (string)bindingContext.ValueProvider.GetValue(bindingContext.ModelName + ".ItemTypeName").ConvertTo(typeof(string));
if (typeName == "LINK")
{
bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => new Link(), typeof(Link));
base.BindModel(controllerContext, bindingContext);
}
else if (typeName == "IMAGE")
{
//bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => new Image(), typeof(Image));
//base.BindModel(controllerContext, bindingContext);
return null;
}
return base.BindModel(controllerContext, bindingContext);
}
これは最初のタイプ(リンク)では正常に機能しますが、画像に対して同じことを実行しようとするとすぐに、次のようなエラーが発生します。
同じキーのアイテムはすでに追加されています。