如何将列名称中具有特殊字符(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", "&"))
}
我在将数据表绑定到 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", "&"))
}