一定要逃逸MVC查看变量的引号作为参数传递给JavaScript
-
21-09-2019 - |
题
我在我要通过一个字符串变量为JavaScript一个MVC视图,但该字符串变量在它('
)具有单引号。我试图做这样的事情。
<a onclick="JavaScript:AddressHandler.ProcessAddress('<%= homeAddress %>');"
class="button-link">change</a>
是homeAddress具有单引号,我必须以某种方式解决办法,这样我可以通过它的JavaScript完整的值。
解决方案
要逸出的字符串是一个Javascript文字串,则用双反斜杠替换反斜线和字符串分隔符以反斜杠和定界符:
<a onclick="AddressHandler.ProcessAddress('<%= homeAddress.Replace(@"\", @"\\").Replace("'", @"\'") %>');" class="button-link">change</a>
请注意:当你把脚本的URL,而不是作为一个事件处理程序的javascript:
协议用于
编辑:结果 如果脚本还包含需要HTML编码字符,应该逃避JavaScript字符串后进行:
<a onclick="<%= Html.Encode("AddressHandler.ProcessAddress('" + homeAddress.Replace(@"\", @"\\").Replace("'", @"\'") +"');") %>" class="button-link">change</a>
所以,如果你不知道什么字符串包含,是你需要先逃避字符串文字安全的,那么HTML编码的代码,以便它可以在HTML标签的属性付诸表决。
其他提示
您可以使用Ajax帮手:Ajax.JavaScriptStringEncode(string strToEncode)
可以写逸出所有单引号(和如果需要的话其它字符)用反斜杠所以它不是由JavaScript误解的方法。
您会想编码是homeAddress为URL。 MVC有一个内置的帮助要做到这一点: UrlHelper.Encode(字符串URL) - 它应该替换%27
单引号
我没有时间来测试它,但看HtmlHelper.Encode(字符串s)。它可能处理转义为您服务。
不隶属于 StackOverflow