将C#字符串转换为JavaScript字符串

7

有没有人知道在Asp.net中将C#字符串转换为JavaScript字符串的方法。我的代码如下:

<script>
  @{string thing = "Cats";}
  var thing = String(@thing);


  </script> 



</div>
<body onload="eventAlert(thing)"></body>

我觉得你想要的是一种从服务器端(代码后台)到客户端(JavaScript)获取字符串值的方法。是这样吗? - crthompson
eventAlert(thing)函数只是将字符串显示为警报,但是上面的代码除非我手动传入字符串,否则不会执行任何操作。 - Sepehr Sobhani
这个字符串是在你的C#代码后台中保存/生成的吗? - crthompson
3个回答

24

在输出字符串之前,您需要对其进行JavaScript编码,否则您的字符串可能会包含导致JavaScript字符串常量过早终止的字符。您可以使用System.Web命名空间中的HttpUtility.JavaScriptStringEncode进行此操作。一旦完成,您需要阻止Razor对结果进行HTML编码,可以使用HtmlHelper.Raw来实现:

@{string thing = "Cats Special Chars \"!'£$%^&*()@;:";}
var thing = "@Html.Raw(HttpUtility.JavaScriptStringEncode(thing))";

2
这很不错。根据您的用例,直接注入"@myString"可能更实际,但是您也可以使用@HttpUtility.JavaScriptStringEncode(value: "hi", addDoubleQuotes: true),让该方法输出一个带或不带双引号的字符串。 - The Muffin Man

3

请尝试以下操作:

var thing = "@(thing)";

1
这就是你应该做的。有时为了确保 Razor 引擎不会混淆,使用 var thing = "@(thing)"; 也很有用。 - Travis J
2
工作得非常好,直到您的字符串中有引号。 - Martin Brown

0

有几种不错的方法可以实现此功能。但是一个非常干净的方法是使用cookie。这样很干净,因为您不会将来自服务器的JavaScript代码注入静态客户端代码中。编写C#以创建JavaScript,然后将其插入变量中可能存在时间问题,具体取决于您的代码何时运行以及.Net正在做什么。在读取字符串时要非常小心,以防安全问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接