我得到错误,而绑定一个数据表到剑道网格。我的数据表列名可能包含特殊字符,如空格和逗号。
视图:
@(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方法
谢谢