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

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

if ("" == "") { // code }; 

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

 if ('' == "") { // code }; 

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

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

您可以在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'") 

我已经通过编写一个HtmlHelper来解决这个问题,它将字符串编码为Javascript中可接受的格式:

 public static string JSEncode(this HtmlHelper htmlHelper, string source) { return (source ?? "").Replace(@"'", @"\'").Replace(@"""", @"\""").Replace(@"&", @"\&").Replace(((char)10).ToString(), "
"); }

然后,在您的视图中:

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