在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 };