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

时间:2017-07-07 08:38:55

标签: javascript c# json ajax asp.net-mvc

我知道这个问题已被多次询问,但这是不同的。

我有kendo grdi,我被选中而没有选择类型,用户可以自由角色进行更改并且有效。我确实尝试过这样的例子Example1Example2以及其他很多。

现在问题是我试图传递给控制器​​的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)
    {
       --------------
       --------------
    }

1 个答案:

答案 0 :(得分:1)

在你提到的例子中,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) {
    }
})

在课程中我更新了成员 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();
}