我需要在javascript中转换内联c#中的双引号。代码如下:
if ("<%= TempData["Message"]%>" == "") {
// code
};
通常情况下,我只会使用单引号:
if ('<%= TempData["Message"]%>' == "") {
// code
};
但是,TempData["Message"]
中有单引号(当它包含由ASP.NET MVC中的Html.ActionLink()帮助程序生成的链接时)。因此,虽然我可以将TempData["Message"]
内的所有ActionLink助手更改为标签,但这是一个有趣的问题,并且很想知道是否有人有答案。
答案 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
};