【发布时间】:2020-02-08 07:58:03
【问题描述】:
我正在尝试将一个 json 对象数组传递给我的控制器操作,但它一直以 null 的形式出现。
Javascript 代码
function UpdateSelected() {
var items = {};
//Loop through grid / sub grids and create json array
$('.k-detail-row .k-grid').each(function () {
var grid = $(this).data("kendoGrid");
var selectedElements = grid.select();
for (var j = 0; j < selectedElements.length; j++) {
var item = grid.dataItem(selectedElements[j]);
var json = item.toJSON();
items = [].concat(items, json);
}
})
//shift the first empty space out
items.shift();
//items is ready to send
alert(JSON.stringify(items));
$.ajax({
cache: false,
url: '/Update/GetSchematicsForSelectedVariants',
type: 'GET',
data: JSON.stringify(items),
success: function (data) {
alert("success");
}
});
}
Json 数组如下所示:
控制器动作
public JsonResult GetSchematicsForSelectedVariants(List<VariantViewModel> vm)//vm coming in null
{
return Json(_dataAccessService.GetSchematicsForMacroVariants(vm),JsonRequestBehavior.AllowGet);
}
VariantViewModel
public class VariantViewModel
{
public string Id { get; set; }
public string Variant { get; set; }
}
所以我不确定这里出了什么问题。我的列表被传入为空。我并不热衷于将 json 对象传递给控制器,但我相信我有我需要的要点。
有人可以指点我正确的方向吗?
【问题讨论】:
-
我可能错了,但我认为您的问题可能是您将数组传递给
data,而不是键值。 -
将
type:'get'更改为type:'post'或将[HttpGet]添加到控制器方法中。 -
您需要将此类数据作为
POST请求传递。当它是GET时,数据会附加到 url。如果您想将其保留为GET,请尝试使用processData: false。 -
感谢您的建议,但这些都不起作用。我将方法更改为 POST,并尝试将控制器更改为 HttpGet。
-
试试这个@Selthien,用
[HttpPost]在c#中标记你的方法,将你的ajax类型更改为POST,不要对你的数据进行字符串化。
标签: javascript asp.net json ajax asp.net-mvc