Javascript 我的json对象到达控制器函数时变为null
我知道这个问题已经被问过很多次了,但这是不同的 我有剑道grdi,我选择了,而不是选择类型,用户有自由角色进行更改,这是可行的。我试过这样的例子,还有很多其他的例子 现在的问题是,我试图传递给控制器的json对象变为null,这就是我在下面尝试的 如果我做错了什么事,你能纠正我吗 Javascript JsonObj:这是我在取消选中“从网格”复选框时得到的结果Javascript 我的json对象到达控制器函数时变为null,javascript,c#,json,ajax,asp.net-mvc,Javascript,C#,Json,Ajax,Asp.net Mvc,我知道这个问题已经被问过很多次了,但这是不同的 我有剑道grdi,我选择了,而不是选择类型,用户有自由角色进行更改,这是可行的。我试过这样的例子,还有很多其他的例子 现在的问题是,我试图传递给控制器的json对象变为null,这就是我在下面尝试的 如果我做错了什么事,你能纠正我吗 Javascript JsonObj:这是我在取消选中“从网格”复选框时得到的结果 [ { mailID: '10' , roleID: '5' , isMailSelected: 'false' } , { m
[ { 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;
}
我的控制者
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)
{
--------------
--------------
}
公共类myItems
{
公共字符串mailID{set;get;}
公共字符串roleID{set;get;}
公共字符串isSelected{set;get;}
}
[HttpPost]
公共操作结果保存(列表myobj)
{
--------------
--------------
}
在您提到的示例中,json对象是实际对象,而不是字符串表示形式。然后使用JSON.stringify()
使用双引号格式化字符串,删除多余的空格等。不幸的是,MVC应用程序在解析JSON时遇到了问题,而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) {
}
})
在类中,我更新了成员的名称isSelected,因为我看到它与json不匹配,我假设您将其更改为isMailSelected
public class myItems
{
public string mailID { set; get; }
public string roleID { set; get; }
public string isMailSelected { set; get; }
}
在我的控制器中,我有与您发布的相同的
[HttpPost]
public ActionResult Save(List<myItems> myobj)
{
return View();
}
[HttpPost]
公共操作结果保存(列表myobj)
{
返回视图();
}
您的控制器方法需要一个数组。当您将data:{myobj:jsonObj}
更改为data:jsonObj,
@NtFreX时,它可能会有所帮助。我已经尝试过了,但它仍然会传递null。您从JavaScript传递给控制器的是字符串。您应该首先创建对象数组,然后使用JSON.stringify将JSON字符串转换为发送给控制器的字符串。您能告诉我如何转换吗?我认为您只需要将数据:{myobj:jsonObj},
替换为数据:displayFilterResults(),
。由于displayFilterResults返回一个字符串化的json对象,在获得正确的格式后,该对象看起来会起作用,因此它必须与。也就是说名字都在qouts中。我怎么能得到这个?{“items”:[{“mailID”:+item.mailID+,“roleID”:+item.roleID+,“isMailSelected”:item.isSelected},{“mailID”:+item.mailID+,“roleID”:+item.roleID+,“isMailSelected”:item.isSelected}我相信如果你只是创建一个json对象并将项目推送到数组中而不是串接字符串,代码会更好;json.myobj.push({mailID:'billgates@micrsoft.com",罗莱德:"总统",;然后在Ajax调用中:data:JSON.stringify(JSON)可以通过将项目推送到JSON.myobj中来填充数组。然后stringify将格式化。然后只需修改displayFilterResults()以生成格式化的json