4

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

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

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

4

5 回答 5

12

您可以使用 Ajax 助手:Ajax.JavaScriptStringEncode(string strToEncode)

于 2011-02-20T22:19:24.010 回答
4

要将字符串转义为 Javascript 字符串文字,请将反斜杠替换为双反斜杠,并将字符串分隔符替换为反斜杠和分隔符:

<a onclick="AddressHandler.ProcessAddress('<%= homeAddress.Replace(@"\", @"\\").Replace("'", @"\'") %>');" class="button-link">change</a>

注意:javascript:当您将脚本放入 URL 时使用该协议,而不是作为事件处理程序。

编辑:
如果脚本还包含需要 HTML 编码的字符,则应在转义 Javascript 字符串后完成:

<a onclick="<%= Html.Encode("AddressHandler.ProcessAddress('" + homeAddress.Replace(@"\", @"\\").Replace("'", @"\'") +"');") %>" class="button-link">change</a>

因此,如果您不知道字符串包含什么,为了安全起见,您需要先对字符串文字进行转义,然后对代码进行 HTML 编码,以便将其放入 HTML 标记的属性中。

于 2009-12-22T19:34:16.897 回答
0

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

于 2009-12-22T19:35:57.240 回答
0

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

于 2009-12-22T19:38:04.393 回答
-1

没时间测试,看HtmlHelper.Encode(string s)。它可能会为您处理转义。

于 2009-12-22T19:33:35.103 回答