在将C#字符串传递给javascript时如何优雅地转义单引号和双引号

时间:2014-02-10 15:08:15

标签: c# javascript asp.net-mvc-4 razor escaping

我有一个C#字符串需要传递给页面然后发送回服务器。它需要能够处理单引号,双引号和可能导致问题的任何其他标准字符。我正在使用MVC4和剃须刀。现在我将字符串传递给javascript。我有这样的事情:

var str = '@Html.Raw(Model.SomeString.Replace("'", @"\'"))';

这很好用,但我想知道是否有一种更好,更优雅的方式来转义将传递给javascript的C#字符串。

我已经尝试将值存储在隐藏字段中,如下所示:

@Html.Hidden(x => x.SomeString)

但是当我去抓取价值时它会出现双引号问题 编辑:结果是Html.Hidden问题是由其他原因引起的

非常感谢任何帮助!

注意:必须在IE9和10中工作。没有ViewBags。

2 个答案:

答案 0 :(得分:10)

您必须使用HttpUtility.JavaScriptStringEncode。这是为了这个目的,它不仅编码引号,还编码转义序列。

BTW @Html.Hidden应该可以正常运行,因为它还处理转义(与上述不同的类型,在这种情况下HTML转义,处理符号,<>等)。

答案 1 :(得分:1)

您可以使用HtmlEncode解码对应。

在javascript中,您必须执行相同操作:HTML-encoding lost when attribute read from input field