转义+(加号)登录Kendo网格ASP.NET MVC ClientTemplate

时间:2013-01-17 16:58:56

标签: asp.net-mvc-4 kendo-ui

我在为Kendo网格中的列定义ASP.NET MVC ClientTemplate时遇到问题,因为“+”符号被剥离,导致客户端生成的模板由于语法错误而失败。 / p>

我的ClientTemplate是:

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

然而,在客户端,这会减少为:

template: "#='Hello'   Name#"

即。加号已被渲染为空格(类似于我猜的URL编码)。如果我直接使用JS,模板的效果非常好(请参阅此JSBin)。

有没有人知道如何逃避+符号以便我可以在ClientTemplate中使用它?

我尝试使用“\\+”进行转义(呈现为“\”),“\+”(无效的C#),&#43;(与{{相同) 1}},尽管+之类的其他工作正常。)

有什么想法吗?感谢。

作为参考,我正在使用Razor标记和2012年第2季的Kendo版本(当我们从Telerik升级时,不能使用Q3但受限于jQuery版本)

注意:在有人问我为什么要这样做之前,我的ClientTemplate实际上更复杂,但这是一个简化的例子来说明问题: - )

6 个答案:

答案 0 :(得分:10)

我检查了源代码 1 ,MVC包装器在将它们呈现给JS之前在所有模板上调用HttpUtility.UrlDecode。因此,要转义+号(或任何其他保留的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行。我怀疑这是一个错误,他们打算致电{ {1}}。

答案 1 :(得分:6)

找到解决方案(可能更多的解决方法)。我没有编写内联JavaScript,而是将代码移到一个单独的JS函数中,并从模​​板代码中调用它,例如:

#=myFunctionToDoComplicatedStuff(Name)#

说实话,出于可测试性,重用和一般良好实践的原因,这可能是应该采取的方法。虽然这对于一些微不足道的东西来说有点烦人!

答案 2 :(得分:1)

如果您只是需要一个简单的解决方案来在ClientTemplate中进行连接以避免加号的编码问题,您可以使用这样的javascript concat函数:

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

答案 3 :(得分:0)

您是否尝试过算术并将其置于引号之外,如下所示:

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

答案 4 :(得分:0)

对于它的价值,我只是遇到了这个并通过减去负值来解决它。如:

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

答案 5 :(得分:0)

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

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

这将导致......

template: "#='Hello + Name#"