需要在MVC View中转义变量的引号以作为参数传递给JavaScript

问题描述 投票:4回答:5

我有一个MVC视图,我必须将一个字符串变量传递给JavaScript,但该字符串变量中有单引号(')。我想做这样的事情

<a onclick="JavaScript:AddressHandler.ProcessAddress('<%= homeAddress %>');" 
                            class="button-link">change</a>

homeAddress有单引号,我必须以某种方式解决方法,以便我可以将它的完整值传递给JavaScript。

javascript model-view-controller escaping parameter-passing
5个回答
4
投票

要将字符串转义为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标记的属性中。


12
投票

您可以使用Ajax帮助程序:Ajax.JavaScriptStringEncode(string strToEncode)


0
投票

你可以编写一个方法,用反斜杠转义所有单引号(和其他字符,如果需要),这样它就不会被javascript误解。


0
投票

您需要将homeAddress编码为URL。 MVC有一个内置的帮助器来做到这一点:UrlHelper.Encode(string url) - 它应该用%27替换单引号


-1
投票

我没时间测试它,但看看HtmlHelper.Encode(string s)。它可能会为你逃避。

© www.soinside.com 2019 - 2024. All rights reserved.