2015-10-15 136 views
1

我將數據綁定到Kendo網格時出現錯誤。我的數據表列名稱可能包含特殊字符,如空格和逗號。如何將列名中包含特殊字符(空格和逗號)的列綁定到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未定義「

回答

2

這裏是詳細的答案我如何處理特殊的人物。一旦通過列接收從數據庫,循環中的數據,並且與有效的標識符替換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; 

然後,在HeaderTemplate中結合在劍道格列時只需更換背面的詞語「SPACE」和「逗號」分別帶有「」和「,」的符號。

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

嘗試過,但無法正常工作。這似乎是Kendo Grid中的一個缺陷或需要改進。 – giparekh

2

這不是一個錯誤。字段名稱中不能有特殊字符或空格。

在Kendo文檔中明確指出here

總結,我引用:「字段名稱應該是一個有效的JavaScript標識符,不應包含空格,不能包含特殊字符,並且第一個字符應該是一個字母。」

你可以做的一件事是用有效的標識符在有問題的字段名稱前加上前綴。

+0

感謝您提供的信息和建議。我如何在我的網格中使用帶有有效標識符的字段名稱前綴來處理「Pitsburg,PA」?你能否通過代碼片段來解釋它。 – giparekh

+0

那麼,在這種情況下,無效字符在中間。您需要將其替換爲有效的字符。您將無法在字段名稱中使用特殊字符。 –

+0

這是個聰明的想法。現在用一個有效的標識符來實現。 – giparekh

0

面臨類似的問題。

我正在嘗試將列與我的模型綁定。 (「報告名稱」)。ClientTemplate(「#= reportname#」)。Encoded(false);

當我的報告名稱是「測試&測試」(或任何特殊字符)。它只傳遞「測試」我的行動方法。 我試着用編碼(假/真)它沒有工作。

所以有什麼辦法讓我可以將列值(帶有特殊字符&,*,#etc)傳遞給我的操作方法。

謝謝

+0

作爲一個單獨的問題與代碼提出,以便我會準確回答它是如何實現的。 – giparekh