![](/img/trans.png)
[英]kendoui ClientTemplate in Grid not working in asp.net mvc 4
[英]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#) +
转义+
(与+
相同,但其他如,
'工作正常)。
有任何想法吗? 谢谢。
作为参考,我正在使用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\\\\'>➕</span>{ Name#")
这将导致......
template: "#='Hello + Name#"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.