2

jQuery ajax を使用してビューモデル リストを作成し、そのビューモデルを別の ActionResult に送信して PartialViews を作成しようとしています。最初の部分はうまく機能し、ビューモデル (リスト) を作成できますが、ビューモデルをコントローラーに送り返して部分ビューを構築しようとすると、ビューモデル内のすべてが 0 になります。正しい数値が返されます。リスト内のアイテムの数ですが、値が失われるようです。

ここに何か欠けているかどうか誰にもわかりますか?

jQuery:

$.ajax({
    async: false,
    type: 'GET',
    dataType: "json",
    url: '@Url.Action("GetMapDetails")',
    success: function (data) {
        $.ajax({
            async: false,
            type: 'POST',
            dataType: "json",
            url: '@Url.Action("GetMapItems")',
            data: {
                list: data
            },
            success: function (list) {
                //callback
                });
            }
        });
    }
});

そしてコントローラー:

public ActionResult GetMapDetails()
{
    List<ViewModel> vm = new List<ViewModel>();

    //create viewmodel here 

    return Json(vm.ToArray(), JsonRequestBehavior.AllowGet);
}
[HttpPost]
public ActionResult GetMapItems(List<ViewModel> list)
{
    return PartialView("_MapItemsPartial", list);
}

contentType: 'application/json'andも使用してみましJSON.stringify(data)たが、Invalid JSON primitiveエラーが発生しました。

助けていただければ幸いです - ありがとう

4

1 に答える 1

3

それらを JSON リクエストとして送信できます。

$.ajax({
    async: false,
    type: 'POST',
    contentType: 'application/json',
    url: '@Url.Action("GetMapItems")',
    data: JSON.stringify({
        list: data
    }),
    success: function (result) {
        //callback
    }
});

また、 POST コントローラー アクションが JSON を返さないdataType: 'json'ため、パラメーターを削除したことにも注意してください。GetMapItemsを返しますPartialView。だから私はあなたが何か間違ったことをしたと思います.JSONを操作することを期待しているあなたの成功コールバックで見ることができるので、これはこのコントローラーアクションから返されることを意図したものではありません.

ああ、これを削除してくださいasync:false=> もう AJAX を行っていないため、AJAX の目的全体が無効になります。現在は SJAX を行っています。

于 2012-08-21T15:47:40.907 に答える