在剑道网格 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#)、&amp;#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(@&lt;text&gt;&lt;/text&gt;).ClientTemplate("#='Hello'" + "Name#")

【讨论】:

我的实际代码比字符串连接更复杂 - 作为条件语句的一部分,有一些逻辑实际上需要进行算术加法,所以我确实需要 +。到目前为止,我唯一的解决方法是将 JS 移出一个函数并调用它,但最好在模板中执行它以将它们保持在一起。干杯。【参考方案5】:

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

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

【讨论】:

【参考方案6】:

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

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

这将导致...

template: "#='Hello + Name#"

【讨论】:

以上是关于在剑道网格 ASP.NET MVC ClientTemplate 中转义 +(加号)符号的主要内容,如果未能解决你的问题,请参考以下文章

ASP NET MVC 剑道网格和列名

在 asp.net 中绑定剑道网格的问题

编辑网格时,如何按行禁用特定字段? Kendo UI ASP.Net MVC 包装器

ASP.Net MVC Kendo Grid 的自定义分页

剑道 DropDownListFor() 与 ASP.NET-MVC

htmlhelper 不包含 ASP.NET MVC RAZOR 中的剑道定义