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

问题描述 投票:1回答:5

将数据表绑定到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'未定义”

asp.net-mvc-4 kendo-grid kendo-asp.net-mvc
5个回答
2
投票

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

在Kendo文档中明确指出here

总而言之,我引用:“字段名称应为有效的Javascript标识符,并且不应包含空格,任何特殊字符,并且第一个字符应为字母。”

您可以做的一件事是,为所涉及的字段名称加上有效的标识符作为前缀。


2
投票

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

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;

然后,将标题模板中的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", "&"))
}

0
投票

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

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

0
投票

面临类似问题。


0
投票

我想知道telerik在模型列绑定中是否支持2个空格。因为在数据库中,我正在以其列名称之一接收数据,所以我有2个空格,例如EX:hello World,但它显示的Hello World我需要2个空格。我需要做什么?

© www.soinside.com 2019 - 2024. All rights reserved.