Jquery ajax将null值返回给控制器 - MVC3

时间:2012-08-21 15:42:36

标签: asp.net-mvc-3 jquery

我正在使用jQuery ajax构建一个viewmodel列表,然后尝试将该viewmodel发送到另一个ActionResult以创建PartialViews。第一部分运行良好,我可以创建viewmodel(List),但是当我尝试将viewmodel发送回控制器以构建部分视图时,viewmodel中的所有内容都为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错误。

感谢任何帮助 - 谢谢

1 个答案:

答案 0 :(得分: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'参数,因为GetMapItems POST控制器操作未返回任何JSON。它返回PartialView。所以我猜你做错了,这不是从这个控制器动作返回的意思,因为从你在成功回调中可以看到你期望操纵JSON。

哦,请删除此async:false =&gt;它击败了AJAX的全部目的,因为你不再使用任何AJAX,你现在正在做SJAX。