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

另请注意,我已删除该dataType: 'json'参数,因为您的GetMapItemsPOST 控制器操作不返回任何 JSON。它返回一个PartialView. 所以我猜你做错了什么,这不是从这个控制器动作返回的意思,因为从我在你的成功回调中看到的你期望操纵 JSON。

哦,请删除这个async:false=> 它违背了 AJAX 的全部目的,因为您不再执行任何 AJAX,您现在正在执行 SJAX。

于 2012-08-21T15:47:40.907 回答