如何将列名称中具有特殊字符(space 和逗号)的列绑定到 Kendo UI 网格?

How to bind columns having special characters (space and comma) in a column name to a Kendo UI Grid?

我在将数据表绑定到 Kendo 网格时遇到错误。我的数据表列名称可能包含特殊字符,例如空格和逗号。

查看:

@(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' 未定义”

您可以尝试将列名括在方括号中 []

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

这不是错误。字段名称中不能有特殊字符或空格。

在 Kendo 文档中here 有明确说明。

总结一下,我引用:"The field name should be a valid Javascript identifier and should contain no spaces, no special characters, and the first character should be a letter."

您可以做的一件事是在相关字段名称前加上一个有效的标识符。

面临类似问题。

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

columns.Bound(p => p.reportname).Title("Report Name").ClientTemplate("#= reportname#").Encoded(false);

当我的报告名称是 "Test & Test"(或任何特殊字符)时。它只将 "Test" 传递给我的操作方法。 我试过编码(false/true)它没有用。

有什么方法可以将列值(带有特殊字符 &、*、# 等)传递给我的操作方法。

谢谢

这是我如何处理特殊字符的详细答案。从数据库接收到数据后,遍历列并将列名替换为有效标识符:

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;

然后,当在 headertemplate 中绑定 Kendo 网格中的列时,只需将单词 "SPACE" 和 "COMMA" 分别替换为符号“ ”和“,”。

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", "&"))
}