我正在使用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
错误。
感谢任何帮助 - 谢谢
答案 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。