1

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);
    }

これは最初のタイプ(リンク)では正常に機能しますが、画像に対して同じことを実行しようとするとすぐに、次のようなエラーが発生します。

同じキーのアイテムはすでに追加されています。

4

1 に答える 1

1

それは正常に機能することが判明し、私の問題は、同じ名前のプロパティを持つこのオブジェクトの基本クラスにありました。

于 2012-08-23T10:43:13.390 に答える