【问题标题】:Length of colnames <> colmodel when using dynamic colNames & colModel使用动态 colNames & colModel 时 colnames <> colmodel 的长度
【发布时间】:2015-01-13 08:02:34
【问题描述】:

在我的 mvc jqgrid 代码中,colnames 和 colmodel 返回相同长度的 col。但是当运行应用程序时,我得到了这个错误。有什么帮助吗?

代码:

public WeekColumns GetWeekColumns(DateTime start, DateTime end)
    {
        WeekColumns week = new WeekColumns();

        string sWeekDate = string.Empty;

        var model = db.GetWeek(start.ToString("MM/dd/yyyy"),
            end.ToString("MM/dd/yyyy")).ToList().Select(s => s.WeekDate.ToString());

        IEnumerable<string> sModel = new List<string>();
        sModel = model;

        string sColumnNames = "['ID', 'Account', 'Lob'";

        foreach (string item in sModel)
            sColumnNames += ", 'C" + item.ToString().Replace("/", "_").Trim() + "'";

        sColumnNames += ", 'Report']";

        string sColumnModels = "[{ name: 'ID', key: true, hidden: true }, ";
        sColumnModels += "{ name: 'Account', width: 150, align: 'center' }, ";
        sColumnModels += "{ name: 'Lob', width: 150, align: 'center' }";

        foreach (string item in sModel)
            sColumnModels += ", { name: 'C" + item.ToString().Replace("/", "_").Trim() + 
                "', width: 150, editable: true}";

        sColumnModels += ", { name: 'Report', width: 150, align: 'center' }]";

        week.ColumnName = sColumnNames;
        week.ColumnModel = sColumnModels;

        return week;
    }

js:

$.ajax({
        url: "Staffing/GetWeekDate",
        type: 'POST',
        dataType: 'json',
        contentType: "application/json",
        cache: false,
        success: function (data) {
            $("#jqTable").jqGrid({
                // Ajax related configurations
                url: "Staffing/LOBStaffing",
                datatype: "json",
                mtype: "POST",
                //ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
                jsonReader: {
                    root: 'rows',
                    page: 'page',
                    total: 'total',
                    records: 'records',
                    repeatitems: true,
                    data: 'data'
                },

                // Specify the column names
                colNames: data.ColumnName,

                // Configure the columns
                colModel: data.ColumnModel,

                // Grid total width and height  
                width: 900,
                height: 350,

                sortname: 'Lob',
                // Paging
                rowList: [],        // disable page size dropdown
                pager: $("#jqTablePager"),
                pgbuttons: false,     // disable page control like next, back button
                pgtext: null,         // disable pager text like 'Page 0 of 10'
                viewrecords: true,
                rowNum: 2000,

                grouping: true,
                groupingView: {
                    groupField: ['Account', 'Lob'],
                    groupColumnShow: [true, true],
                    groupText: ['<b>{0}</b>'],
                    groupCollapse: false,
                    groupOrder: ['asc', 'asc'],
                    groupSummary: [true, true]
                },

                // Grid caption
                caption: "List of Forms"
            }).navGrid("#jqTablePager",
                {
                    refresh: true,
                    add: false,
                    edit: false,
                    del: false,
                    search: false,
                    refreshtext: "Refresh",
                    searchtext: "Search"
                },
                {}, // settings for edit
                {}, // settings for add
                {}, // settings for delete
                {multipleGroup: true }, // settings for search,
                {
                multipleGroup: true,
                sopt: ["cn", "eq"],
                caption: "Search",
                Find: "Search"
            }); // Search options. Some options can be set on column level

        },
        error: function () {
            alert('error');
        }
    });

【问题讨论】:

  • 你能显示你的网格代码和你形成行和列的代码吗?

标签: jquery jqgrid


【解决方案1】:

colNamescolModel 的值应该是相同大小的项目的数组。看来您当前的代码尝试用 "['ID', 'Account', 'Lob', ...]""[{ name: 'ID', key: true, hidden: true }, ...]" 之类的文本分配 strings。 jqGrid 的代码尝试比较 arrays colNamescolModel 中的项目数(请参阅 here)比较您使用的 strings 的长度作为colNamescolModel 的值。所以显示的消息是不正确的,但你输入的数据仍然是错误的。

因此,要解决问题,您必须修复data.ColumnNamedata.ColumnModel 的格式(更改类型)。

例如,您可以将data.ColumnNamedata.ColumnModel 中的' 替换为\"。它使字符串成为正确的 JSON 字符串,您可以使用 $.parseJSON()(我的意思是 colNames: $.parseJSON(data.ColumnName), colModel: $.parseJSON(data.ColumnModel))。

【讨论】:

  • 谢谢奥列格。我已将' 替换为/,但仍然出现一些错误。 JSON 无效。
  • 我建议将 ' 替换为 " 。如果您在 C# 中在另一个字符串中使用 ",则应该对其进行转义。例如,您需要将 string sColumnModels = "[{ name: 'ID', key: true, hidden: true }, "; 替换为 string sColumnModels = "[{ name: \"ID\", key: true, hidden: true }, ";。您应该对所有选项执行相同的操作。
  • 嗨@Oleg,已经更改了代码,但仍有一些错误。 ColumnName: SyntaxError: JSON.parse: expected ':' after property name in object at line 1 column 7 of JSON data "[{"ID", "Account", "Lob", "C01_04_2015", "C01_11_2015", "C01_18_2015", "C01_25_2015", "Report"}]"
  • ColumnModel SyntaxError: JSON.parse: expected property name or '}' at the line 1 column 4 of JSON data "[{ name: "ID", key: true, hidden: true }, { name: "Account", width: 150, align: "center" }, { name: "Lob", width: 150, align: "center" }, { name: "C01_04_2015", width: 150, editable: true}, { name: "C01_11_2015", width: 150, editable: true}, { name: "C01_18_2015", width: 150, editable: true}, { name: "C01_25_2015", width: 150, editable: true}, { name: "Report", width: 150, align: "center" }]"
  • 嗨@Oleg!有效!我刚刚使用在线 JSON 解析器对我的字符串输出进行了一些更改。谢谢!!
【解决方案2】:

尝试将colModel: data.ColumnModel 更改为colModel: data.ColumnModel.items,它来自@Oleg answer

有时我认为@Oleg 已经回答了所有与 jqgrid 相关的问题...

【讨论】:

  • 感谢 teo 的回复。我已经更改了 columnModel > columnModel.items。 jqgrid 工作,但没有数据显示。当我在 FireBUg 上检查它时,ColumnModel.items = 'undefined'。我的代码是否遗漏了什么?还是我的 ColumnModel 设置正确?提前致谢!
  • 我想这是因为你有 columnModel 字段作为 string,我认为控制器中的 Json() 方法以错误的方式序列化它,对于 jqgrid 来说是意外的。尝试将其更改为List&lt;string&gt; 并添加每一行数据。
【解决方案3】:

您可以省略使用 colNames 数组。最好使用带有标签集的 colModel

代码

colNames : ['My Name',....], colModel : [ {name:'myname',...}, ...],

等价于

colModel : [ {name:'myname', label: 'My Name', ...}, ...],

亲切的问候

【讨论】:

    猜你喜欢
    • 2013-03-06
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多