在JavaScript中内联C#脚本中如何转义双引号

5

我需要在JavaScript中转义内联C#中的双引号。 代码如下:

if ("<%= TempData["Message"]%>" == "") {
    // code
};

通常,我会像这样使用单引号:

if ('<%= TempData["Message"]%>' == "") {
    // code
};

然而,TempData["Message"] 中包含单引号(当它包含由 ASP.NET MVC 中的 Html.ActionLink() 帮助程序生成的链接时)。因此,虽然我可以将 TempData["Message"] 内部的所有 ActionLink 帮助程序更改为 <a> 标签,但这是一个有趣的问题,我很想听听是否有人有答案。

3个回答

9

哎呀,我没有.NET 4。它有什么作用? - ajbeaven
它会转义一些字符。使用 WPL。 - SLaks

2
您可以在 Razor 视图中使用 AjaxHelper.JavaScriptStringEncode 方法,例如:
if ("@Ajax.JavaScriptStringEncode(TempData["Message"].ToString())" == "") {
    // do stuff
}

如果这太啰嗦了,可以在 /App_Code/JS.cshtml 中创建这个小助手。
@helper Encode(string value) {
    @(HttpUtility.JavaScriptStringEncode(value))
}

你可以从任何视图中调用它:

@JS.Encode("'single these quotes are encoded'")

0
我通过编写一个 HtmlHelper 来解决这个问题,它将字符串编码为 Javascript 可接受的格式:
public static string JSEncode(this HtmlHelper htmlHelper, string source)
{
    return (source ?? "").Replace(@"'", @"\'").Replace(@"""", @"\""").Replace(@"&", @"\&").Replace(((char)10).ToString(), "<br />");
}

那么,在你的视图中:

if ('<%= Html.JSEncode( TempData["Message"] ) %>' == "") {
    // code
};

这是非常错误的。你不应该用<br />标签替换\r,而且还有更多需要转义的字符。 - SLaks
具体来说,要转义反斜杠本身(否则 \" 会被转义为 \\" 并破坏字符串的安全性),以及其他换行符。 - bobince
这是对我有效的方法,以及我需要编码的信息。请根据您个人的需求进行调整。 - Clicktricity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接