如何将列名中包含特殊字符(空格和逗号)的列绑定到Kendo UI Grid



我得到错误,而绑定一个数据表到剑道网格。我的数据表列名可能包含特殊字符,如空格和逗号。

视图:

@(Html.Kendo().Grid(Model)
        .Name("Test1Grid")
                .Columns(columns =>
                    {
                        foreach (System.Data.DataColumn col in GridData.Columns)
                        {
                          columns.Bound(col.ColumnName).Title(col.Caption).ClientTemplate("#=kendo.toString(" + col.ColumnName + ", "n0")#");
                        }
                    }
                     )
                .DataSource(dataSource => dataSource
                        .Ajax()
                            .Read(read => read.Action("GridData", "abc"))
                        .Model(model =>
                        {
                            foreach (System.Data.DataColumn column in GridData.Columns)
                            {
                                model.Field(column.ColumnName, column.DataType);
                            }
                        })
                    )
        )

数据表:

Name      London      New York      Pittsburgh, PA      Tokyo
order1    100         150           300                 300 
order2    500         650           800                 350

我在这里得到的java脚本错误是"0x800a1391 - JavaScript运行时错误:'PA'未定义"

下面是我如何处理特殊字符的详细答案。一旦从数据库接收到数据,循环遍历列并使用有效标识符替换columnname,如:

string col_new;
foreach (DataColumn col in dt.Columns)
{
StringBuilder sb = new StringBuilder(col.ColumnName.ToString().Trim()); 
col_New = sb.Replace(" ", "SPACE").Replace(",", "COMMA").ToString();
}
dt.Columns[ColumnName].ColumnName = col_New;
return dt;

然后在头模板中绑定剑道网格中的列时,只需分别用符号"one_answers","替换回单词"SPACE"one_answers"逗号"。

foreach (System.Data.DataColumn col in Model.Columns)
{
 columns.Bound(col.ColumnName)
 .Title(col.ColumnName)  
 .HeaderTemplate("col.ColumnName.ToString().Trim().Substring(3).Replace("SPACE", " ").Replace("AND", "&"))
}

这不是一个bug。字段名中不能有特殊字符或空格

在剑道文档中有明确的说明。

总结一下,我引用一下:"字段名应该是一个有效的Javascript标识符,不应该包含空格,不应该包含特殊字符,第一个字符应该是一个字母。"

您可以做的一件事是在有问题的字段名前面加上一个有效的标识符。

您可以尝试将您的列名包装在括号[]

columns.Bound(string.Format("["{0}"]",col.ColumnName).Title(col.Caption).ClientTemplate("#=kendo.toString(" + col.ColumnName + ", "n0")#");

面临类似的问题。

我正在尝试将列与我的模型绑定。

列。绑定(p => p.reportname)。标题("报告名称")。ClientTemplate("# = reportname #").Encoded(假);

当我的reportname为"Test &Test"(或任何特殊字符)。它只将"Test"传递给我的动作方法。我已经尝试了编码(false/true),但没有工作。

有没有办法可以让我把列值(带有特殊字符&,*,#等)传递给我的action方法

谢谢

最新更新