2013-01-17 14 views
6

我在Kendo網格中爲列定義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;(同+,但其他如&#44;「做工精細)。

任何想法?謝謝。

僅供參考我使用剃刀標記和2012年第二季度發佈劍道(不能使用Q3還通過jQuery的版本有限,因爲我們從Telerik的升級)

注:有人問之前爲什麼我「M這樣做,我ClientTemplate實際上是更復雜,但是這是一個簡單的例子來說明這個問題:-)

回答

6

找到了解決方案(可能更多的解決方法)。而不是寫內嵌的JavaScript,我搬到我的代碼到一個單獨的JS函數,稱那是從模板代碼,例如:

#=myFunctionToDoComplicatedStuff(Name)# 

說實話,可測性,重用性和通用性好做法這個理由可能是方法無論如何應該採取。對於一些微不足道的東西有點煩人!

0

您是否嘗試過採取算術,並把它的報價如下之外:

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

+0

我的實際代碼比字符串連接更復雜 - 作爲條件語句的一部分,實際上需要進行算術加法,所以我確實需要+。目前爲止,唯一的解決方法是將JS移出到一個函數中,然後調用它,但在模板中將它保留在一起會很好。乾杯。 –

0

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

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

我找到了使用alternative plus sign的解決方案。

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

這將導致...

template: "#='Hello + Name#" 
1

如果你只需要在你的ClientTemplate做串聯一個簡單的解決方案,避免了用加號的編碼問題,您可以使用JavaScript concat函數是這樣的:

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

我查源代碼,MVC包裝器在將它們呈現給JS之前,在所有模板上調用HttpUtility.UrlDecode。因此,爲了逃避你的+符號(或任何其他保留的URL字符),請使用percent encoding。在這種情況下%2B

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

v2013.3,SRC \ Kendo.Mvc \ Kendo.Mvc \ UI \網格\列\ GridColumnBase.cs,管線135我懷疑這是一個錯誤,他們打算呼籲HttpUtility.UrlEncode