Asp.net-Mvc-4

在劍道網格 ASP.NET MVC ClientTemplate 中轉義 +(加號)符號

  • June 23, 2014

我在為 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)#

老實說,出於可測試性、重用和一般良好實踐的原因,這可能是無論如何都應該採用的方法。不過對於一些瑣碎的事情來說有點煩人!

我檢查了原始碼1HttpUtility.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.

引用自:https://stackoverflow.com/questions/14384183