3

MVC 3アクションでモデル(ディクショナリを含む)としてJSONを受け取るにはどうすればよいですか?

ブラウザ側:JSONをMVC3アクションに投稿します:

UpdateData : 
{
   Id: 88991,
   Changes:
   {
      X:5,
      Y:6
   }
}

サーバ側:

public class UpdateDataModel
{
    public int Id {get;set;}
    public IDictionary<string, string> Changes {get;set;}
}

public ActionResult SaveUpdateData(UpdateDataModel updateData)
{
    // updateData.Id should be 88991
    // updateData.Changes should be a dictionary containing X:5, Y:6
}
4

2 に答える 2

3

私はそれがこのようになるべきだと思います:

UpdateData : 
{
   Id: 88991,
   Changes:
   [
      { Key: 'X', Value: 5 },
      { Key: 'Y', Value: 6 }
   ]
}
于 2012-12-19T07:40:01.087 に答える
1

私は通常、JSONライブラリと組み合わせたjQueryを使用してajaxを介してサーバーにPOSTバックすることでこれを行います。

サーバーにポストバックされたjsonは、MVCのデフォルトのモデルバインダーが何にマップするかを判断できるように、サーバー側モデルのプロパティと正しく一致する必要があります。コントローラのアクション/ルートは問題ありません。クライアント側は次のようになります。

    function Save()
    {
        var data = {
            updateData: {
                Id: 85,
                Changes: [
                    { Key: 'A', Value: 'B' },
                    { Key: 'C', Value: 'D' },
                ]
             }
        };

        $.ajax({
            type: 'POST',
            url: '/someController/SaveUpdateData',
            contentType: 'application/json',
            dataType: 'json',
            data: JSON.stringify(data),
            success: function(response) {
                //do stuff here after finishing server side
            }
        });
    }

jQueryライブラリ

JSONライブラリ

于 2012-12-19T08:47:53.150 に答える