我知道这个问题已经被问过很多次了,但这次是不同的。
我有 kendo grdi,我选择了和未选择类型,用户可以自由 Angular 色进行更改并且有效。我确实尝试过这样的例子 Example1 , Example2和许多其他人。
现在的问题是我试图传递给 Controller 的 json 对象变为空,这就是我在下面尝试过的。
如果我做错了什么,你能纠正我吗?
Javascript
JsonObj:这是我从网格复选框中取消选择时得到的结果
[ { mailID: '10' , roleID: '5' , isMailSelected: 'false' } , {
mailID: '11' , roleID: '5' , isMailSelected: 'false' } , {
mailID: '19' , roleID: '9' , isMailSelected: 'false' } ]
function goToControllerSave() {
var jsonObj = displayFilterResults();
$.ajax({
url: '@Url.Action("Save", "Account")',
type: "POST",
dataType: "json",
traditional: true,
data: { myobj: jsonObj },
success: function (data) {
},
error: function (data) {
}
})
}
$(function () {
$('#Grid1').on('click', '.chkbx', function () {
var checked = $(this).is(':checked');
var grid = $('#Grid1').data().kendoGrid;
var dataItem = grid.dataItem($(this).closest('tr'));
dataItem.set('isSelected', checked);
})
})
//My json obj: this returns results on Alert
function displayFilterResults() {
var items = "[";
var dataSource = $("#Grid1").data("kendoGrid").dataSource;
var filters = dataSource.filter();
var allData = dataSource.data();
var query = new kendo.data.Query(allData);
var filteredData = query.filter(filters).data;
items = items + " { mailID: '" + item.mailID + "' , roleID: '" +
item.roleID + "' , isSelected: '" + item.isSelected + "' } ,";
});
if (items.charAt(items.length - 1) == ',') {
items = items.substr(0, items.length - 1);
}
items = items + "]";
alert(items)
return items;
}
我的 Controller
public class myItems
{
public string mailID { set; get; }
public string roleID { set; get; }
public string isSelected { set; get; }
}
[HttpPost]
public ActionResult Save(List<myItems> myobj)
{
--------------
--------------
}
最佳答案
在您提到的示例中,json 对象是一个实际对象,而不是字符串表示形式。然后 JSON.stringify()
用于使用双引号、删除多余空格等来获取格式化的字符串。不幸的是,MVC 应用程序在解析看起来不像这样的 json 时遇到问题。
由于是直接创建字符串,所以需要产生类似的json格式。
var json = '{"myobj":[';
json +='{mailID:"10",roleID:"5",isMailSelected:"false"},';
json+='{mailID:"11",roleID:"5",isMailSelected:"false"},';
json +='{mailID:"19",roleID:"9",isMailSelected:"false"}'
json +=']}';
$.ajax({
url: '@Url.Action("Save", "Account")',
type: "POST",
contentType: "application/json",
dataType: 'html',
data: json,
success: function (data) {
},
error: function (data) {
}
})
在类(class)中,我更新了成员 isSelected 的名称,因为我发现它与 json 不匹配,我假设您已将其更改为 isMailSelected。
public class myItems
{
public string mailID { set; get; }
public string roleID { set; get; }
public string isMailSelected { set; get; }
}
在我的 Controller 中我有你发布的相同内容
[HttpPost]
public ActionResult Save(List<myItems> myobj)
{
return View();
}
关于javascript - 我的 json 对象在到达我的 Controller 函数时变为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44966291/