Javascript 我的json对象到达控制器函数时变为null

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

我知道这个问题已经被问过很多次了,但这是不同的

我有剑道grdi,我选择了,而不是选择类型,用户有自由角色进行更改,这是可行的。我试过这样的例子,还有很多其他的例子

现在的问题是,我试图传递给控制器的json对象变为null,这就是我在下面尝试的

如果我做错了什么事,你能纠正我吗

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;
}
我的控制者

   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