簡體   English   中英

轉義+(加號)登錄Kendo網格ASP.NET MVC ClientTemplate

[英]Escaping +(plus) sign in Kendo grid ASP.NET MVC ClientTemplate

我在為Kendo網格中的列定義ASP.NET MVC ClientTemplate時遇到問題,因為“+”符號被剝離,導致客戶端生成的模板由於語法錯誤而失敗。

我的ClientTemplate是:

c.Template(@<text></text>).ClientTemplate("#='Hello' + Name#")

但是,在客戶端,這會減少到:

template: "#='Hello'   Name#"

即加號已被渲染為空格(類似於我猜的URL編碼)。 如果我直接從JS使用該模板,則該模板非常有效(請參閱此JSBin )。

有誰知道如何逃脫+符號所以我可以在ClientTemplate中使用它?

我嘗試使用' \\\\+ '(呈現為' \\ '),' \\+ '(無效的C#) &#43;轉義&#43; (與+相同,但其他如&#44; '工作正常)。

有任何想法嗎? 謝謝。

作為參考,我正在使用Razor標記和Q2 2012 Kendo版本(當我們從Telerik升級時,不能使用Q3但受限於jQuery版本)

注意:在有人問為什么我這樣做之前,我的ClientTemplate實際上更復雜,但這是一個簡化的例子來說明問題:-)

我檢查了源代碼1 ,MVC包裝器在將它們呈現給JS之前在所有模板上調用HttpUtility.UrlDecode 因此,要轉義+號(或任何其他保留的URL字符),請使用百分比編碼 在這種情況下%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

找到了解決方案(可能更多的解決方法)。 我沒有編寫內聯JavaScript,而是將代碼移動到單獨的JS函數中,並從模​​板代碼中調用它,例如:

#=myFunctionToDoComplicatedStuff(Name)#

說實話,出於可測試性,重用和一般良好實踐的原因,這可能是應該采取的方法。 盡管有些微不足道的事情,但有點煩人!

如果您只需要一個簡單的解決方案來在ClientTemplate中進行連接以避免加號的編碼問題,您可以使用這樣的javascript concat函數:

c.Template(@<text></text>).ClientTemplate("#='Hello'.concat(Name)#")

您是否嘗試過算術並將其置於引號之外,如下所示:

c.Template(@<text></text>).ClientTemplate("#='Hello'" + "Name#")

對於它的價值,我只是遇到了這個並通過減去負值來解決它。 如:

kendo.parseFloat(Amount)  - -kendo.parseFloat(Tip)

我通過使用替代加號找到了解決方案。

c.Template(@<text></text>).ClientTemplate("#='Hello' (<span style=\\\\'font-size: 0.6em\\\\'>&#10133;</span>{ Name#")

這將導致......

template: "#='Hello + Name#"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM