javascript - 我的 json 对象在到达我的 Controller 函数时变为 null

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

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

我有 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/

相关文章:

javascript - 删除一个对象的键也会删除另一个对象中的键 - Javascript

javascript - 如何在搜索数据表中回显/显示结果?

xml - JSON 是否有 +json 后缀约定?

php - 如何将数值转换为字符串?

javascript - AJAX 没有设置 PHP $_POST 变量,所以它返回 'Undefined'

c# - 如何通过 javascript 添加 ASP DropDown 值?

c# - 文件夹选取器在移动设备上引发异常

c# - c# 问题中的接口(interface)

c# - 未调用 UWP EventTriggerBehaviour 命令

android - 获取 Instagram 快拍 Json