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 %>);
为什么我可以使用整数而不能使用字符串?还有别的办法吗?
谢谢。
您需要在字符串周围添加引号;否则浏览器会看到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'
的消息框。