1

次のように、viewModel を使用して AJAX を使用してデータを ASP.NET MVC コントローラーに投稿しようとしています。

public class FunkyThingUpdateModel
{
   public int FunkyThing_ID{get;set;}
   public string Name{get;set;}
   public IDictionary SizesAvailable{ get; set;}
}

残念ながら、モデル バインダーを IDicationary にバインドするのに苦労しています。コントローラーに渡された JSON に が含まれているsizesAvailable場合null、コントローラー メソッドは正常に呼び出されます。ただし、sizesAvailable にデータがある場合、内部サーバー エラー 500 が発生します。

私のJSONは次のようにフォーマットされています:

 {"FunkyThing_ID":1,"Name":"Pogo Stick","SizesAvailable":{"1":"Extra
 Large","2":"Extra Tiddly"}}

わからないのは、何か不可能なことをしようとしているのかということです。IDictionary にバインドする方法はありますか? そうでない場合、最良の代替手段は何ですか?

それとも、JSON を別の方法でフォーマットする必要があるだけですか?

ここで同様の質問をいくつか見つけましたが、それらのほとんどはかなり古いものです。

私が使用しているMVC 4でこれが可能であるという兆候がいくつかあったようですが、コンテキストを誤解していた可能性があります。

4

1 に答える 1

2

テストされていませんが、作成するオブジェクトのジェネリック インターフェイス定義を指定する必要があると思います。

public IDictionary<int, string> SizesAvailable{ get; set;}

また、配列としてSizesAvailableを通知するには、ajax定義のデータを変更する必要があります

$.ajax({
    url:'your url', 
    type: 'post', 
    contentType : 'application/json', 
    data: JSON.stringify({FunkyThing_ID:1, Name:"Pogo Stick", SizesAvailable:[{key: 1, value:"Extra Large"},{key:2, value: "Extra Tiddly"}]}), 
    success: function(response){
        console.log(response);
    }
});

編集

サイズの文字列配列(辞書ではない)のみを取得することを意図している場合は、変更します

public string[] SizesAvailable{ get; set;}

データを次のように送信します。

data: JSON.stringify({FunkyThing_ID:1, Name:"Pogo Stick", SizesAvailable:["Extra Large","Extra Tiddly"]}), 

お役に立てれば。

于 2013-04-19T11:46:52.003 に答える