在劍道網格 ASP.NET MVC ClientTemplate 中轉義 +(加號)符號
我在為 Kendo 網格中的列定義 ASP.NET MVC ClientTemplate 時遇到問題,因為“+”號已被刪除,這會導致客戶端生成的模板因語法錯誤而失敗。
我的客戶模板是:
c.Template(@<text></text>).ClientTemplate("#='Hello' + Name#")但是,在客戶端中,這會簡化為:
template: "#='Hello' Name#"即加號已呈現為空格(我猜類似於 URL 編碼)。如果我直接從 JS 使用,該模板可以完美執行(請參閱此JSBin)。
有誰知道我如何逃避 + 號以便在 ClientTemplate 中使用它?
我嘗試使用 ’
\\+’ 轉義(呈現為 ’\’)、’\+’(無效的 C#)、+(與 ’ 相同+,儘管其他諸如,’ 工作正常)。有任何想法嗎?謝謝。
作為參考,我正在使用 Razor 標記和 Q2 2012 Kendo 版本(不能使用 Q3,因為我們從 Telerik 升級時受 jQuery 版本的限制)
**注意:**在有人問我為什麼要這樣做之前,我的 ClientTemplate 實際上更複雜,但這是一個說明問題的簡化範例 :-)
找到了一個解決方案(可能更多的解決方法)。我沒有編寫內聯 JavaScript,而是將我的程式碼移動到一個單獨的 JS 函式並從模板程式碼中呼叫它,例如:
#=myFunctionToDoComplicatedStuff(Name)#老實說,出於可測試性、重用和一般良好實踐的原因,這可能是無論如何都應該採用的方法。不過對於一些瑣碎的事情來說有點煩人!
我檢查了原始碼1
HttpUtility.UrlDecode,MVC 包裝器在將它們呈現給 JS 之前呼叫所有模板。因此,要轉義您的 + 號(或任何其他保留的 URL 字元),請使用percent encoding。在這種情況下%2B。c.Template(@<text></text>).ClientTemplate("#='Hello' %2B Name#")1 v2013.3,src\Kendo.Mvc\Kendo.Mvc\UI\Grid\Columns\GridColumnBase.cs,第 135 行。我懷疑這是一個錯誤,他們打算呼叫
HttpUtility.UrlEncode.