在剑道网格 ASP.NET MVC ClientTemplate 中转义 +(加号)符号
Posted
技术标签:
【中文标题】在剑道网格 ASP.NET MVC ClientTemplate 中转义 +(加号)符号【英文标题】:Escaping +(plus) sign in Kendo grid ASP.NET MVC ClientTemplate 【发布时间】:2013-01-01 07:02:21 【问题描述】:我在为 Kendo 网格中的列定义 ASP.NET MVC ClientTemplate 时遇到问题,因为“+”号已被删除,这会导致客户端生成的模板因语法错误而失败。
我的客户模板是:
c.Template(@<text></text>).ClientTemplate("#='Hello' + Name#")
但是,在客户端中,这会简化为:
template: "#='Hello' Name#"
即加号已呈现为空格(我猜类似于 URL 编码)。如果我直接从 JS 中使用,该模板可以完美运行(参见 JSBin)。
有谁知道如何转义 + 号以便在 ClientTemplate 中使用它?
我尝试过使用 '\\+
' 进行转义(呈现为 '\
')、'\+
'(无效的 C#)、&#43;
(与 +
相同,尽管其他如 @987654329 @' 工作正常)。
有什么想法吗?谢谢。
作为参考,我正在使用 Razor 标记和 2012 年第二季度 Kendo 版本(由于我们从 Telerik 升级,受 jQuery 版本的限制,不能使用第三季度)
注意:在有人问我为什么要这样做之前,我的 ClientTemplate 实际上更复杂,但这是一个说明问题的简化示例 :-)
【问题讨论】:
【参考方案1】:我检查了源代码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 行。我怀疑这是一个错误,他们打算调用 @ 987654325@.
【讨论】:
【参考方案2】:找到了解决方案(可能更多的是解决方法)。我没有编写内联 javascript,而是将我的代码移动到一个单独的 JS 函数并从模板代码中调用它,例如:
#=myFunctionToDoComplicatedStuff(Name)#
说实话,出于可测试性、重用和一般良好实践的原因,这可能是无论如何都应该采用的方法。不过对于一些琐碎的事情来说有点烦人!
【讨论】:
【参考方案3】:如果您只需要一个简单的解决方案来在您的 ClientTemplate 中进行连接以避免加号的编码问题,您可以使用 javascript concat 函数,如下所示:
c.Template(@<text></text>).ClientTemplate("#='Hello'.concat(Name)#")
【讨论】:
【参考方案4】:你有没有试过把算术放在下面的引号之外:
c.Template(@<text></text>).ClientTemplate("#='Hello'" + "Name#")
【讨论】:
我的实际代码比字符串连接更复杂 - 作为条件语句的一部分,有一些逻辑实际上需要进行算术加法,所以我确实需要 +。到目前为止,我唯一的解决方法是将 JS 移出一个函数并调用它,但最好在模板中执行它以将它们保持在一起。干杯。【参考方案5】:对于它的价值,我只是遇到了这个问题并通过减去一个负值来解决它。如:
kendo.parseFloat(Amount) - -kendo.parseFloat(Tip)
【讨论】:
【参考方案6】:我找到了使用alternative plus sign 的解决方案。
c.Template(@<text></text>).ClientTemplate("#='Hello' (<span style=\\'font-size: 0.6em\\'>&#10133;</span> Name#")
这将导致...
template: "#='Hello + Name#"
【讨论】:
以上是关于在剑道网格 ASP.NET MVC ClientTemplate 中转义 +(加号)符号的主要内容,如果未能解决你的问题,请参考以下文章
编辑网格时,如何按行禁用特定字段? Kendo UI ASP.Net MVC 包装器