在javascript中转换内联c#脚本中的双引号

时间:2010-09-21 23:01:07

标签: c# javascript asp.net-mvc escaping

我需要在javascript中转换内联c#中的双引号。代码如下:

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

通常情况下,我只会使用单引号:

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

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

3 个答案:

答案 0 :(得分:8)

致电HttpUtility.JavaScriptStringEncode 这种方法是ASP.Net 4.0的新方法;对于早期版本,请使用WPL

答案 1 :(得分: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'")

答案 2 :(得分:0)

我已经通过编写一个HtmlHelper来解决这个问题,该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
};