Tim*_*don 7 asp.net-mvc-4 kendo-ui
我在为Kendo网格中的列定义ASP.NET MVC ClientTemplate时遇到问题,因为"+"符号被剥离,导致客户端生成的模板由于语法错误而失败.
我的ClientTemplate是:
c.Template(@<text></text>).ClientTemplate("#='Hello' + Name#")
Run Code Online (Sandbox Code Playgroud)
但是,在客户端,这会减少到:
template: "#='Hello' Name#"
Run Code Online (Sandbox Code Playgroud)
即加号已被渲染为空格(类似于我猜的URL编码).如果我直接从JS使用该模板,则该模板非常有效(请参阅此JSBin).
有谁知道如何逃脱+符号所以我可以在ClientTemplate中使用它?
我尝试使用' \\+'(被渲染为' \'),' \+(无效的C#)转义,+(+尽管其他如,"工作正常").
有任何想法吗?谢谢.
作为参考,我正在使用Razor标记和Q2 2012 Kendo版本(当我们从Telerik升级时,不能使用Q3但受限于jQuery版本)
注意:在有人问为什么我这样做之前,我的ClientTemplate实际上更复杂,但这是一个简化的例子来说明问题:-)
jus*_*mer 10
我检查了源代码1,MVC包装器HttpUtility.UrlDecode在将它们呈现给JS之前调用所有模板.因此,要转义+号(或任何其他保留的URL字符),请使用百分比编码.在这种情况下%2B.
c.Template(@<text></text>).ClientTemplate("#='Hello' %2B Name#")
Run Code Online (Sandbox Code Playgroud)
1 v2013.3,src\Kendo.Mvc\Kendo.Mvc\UI\Grid\Columns\GridColumnBase.cs,第135行.我怀疑这是一个错误,他们打算打电话HttpUtility.UrlEncode.
找到了解决方案(可能更多的解决方法).我没有编写内联JavaScript,而是将代码移动到单独的JS函数中,并从模板代码中调用它,例如:
#=myFunctionToDoComplicatedStuff(Name)#
Run Code Online (Sandbox Code Playgroud)
说实话,出于可测试性,重用和一般良好实践的原因,这可能是应该采取的方法.尽管有些微不足道的事情,但有点烦人!
| 归档时间: |
|
| 查看次数: |
4698 次 |
| 最近记录: |