Javascript / ASP. NET MVC 4 -在Javascript中使用c#字符串

本文关键字:Javascript 字符串 ASP NET MVC | 更新日期: 2023-09-27 18:18:34

我需要能够在JavaScript中访问c#代码中保存的字符串。为了测试,我尝试在JavaScript中显示一个带有c#字符串的消息框(我使用这个字符串文字和消息框作为示例场景):

alert(<%: "TEST" %>);

运行此代码时,不显示任何消息框。另一方面,将显示一个带有以下代码的消息框:

alert(<%: 6 %>);

为什么我可以使用整数而不能使用字符串?还有别的办法吗?

谢谢。

Javascript / ASP. NET MVC 4 -在Javascript中使用c#字符串

您需要在字符串周围添加引号;否则浏览器会看到alert(TEST);,这是错误的。为了防止跨站点脚本攻击,还需要正确转义特殊字符。调用HttpUtility.JavaScriptStringEncode可以同时做这两件事:

alert(<%= HttpUtility.JavaScriptStringEncode("TEST", true) %>);

注意:如果此JavaScript片段出现在HTML属性中,如onclick,您可能需要将<%=更改为<%:,以便双引号也被HTML编码。

为什么我可以使用整数而不能使用字符串?

因为你需要把字符串放在引号:

alert("<%: "TEST" %>");
与往常一样,这里的关键是查看浏览器实际接收到的内容。对于原始代码,浏览器看到的是:
alert(TEST);

…它试图使用变量 TEST,而不是文字字符串。

现在在上面,我已经假设字符串不会有任何"在它或其他东西是无效的JavaScript字符串文字。这通常不是一个好的假设。

如果您正在使用。net的最新版本或使用JSON。Net(请参阅此问题了解详细信息),您可以使用JSON序列化器输出字符串,这将确保其中可能有问题的任何内容都被正确编码/转义。例如,对于JSON.Net,您可以使用:

// With JSON.Net
alert(<%: JsonConvert.ToString("TEST") %>);
// With a recent version of .Net
alert(<%: HttpUtility.JavaScriptStringEncode("TEST", true) %>);

问题在于如何将其转换为JavaScript:

alert(<%: "TEST" %>);

alert(TEST);

这是一个问题,因为它假设有一个名为TEST的变量,您希望显示其值,但最有可能的是,TEST未定义。您可能需要这样做:

alert('<%: "TEST" %>');

但由于这是MVC 4,您可以使用Json.Encode方法更简洁,像这样:

alert(<%: Json.Encode("TEST") %>);

这两个都将转换为

alert('TEST');

这应该显示一个字符串'TEST'的消息框。