在javascript内的内联c#脚本中转义双引号
我需要在javascript中的内联c#中转义一个双引号。代码如下:在javascript内的内联c#脚本中转义双引号,c#,javascript,asp.net-mvc,escaping,C#,Javascript,Asp.net Mvc,Escaping,我需要在javascript中的内联c#中转义一个双引号。代码如下: if ("<%= TempData["Message"]%>" == "") { // code }; 如果(“==”){ //代码 }; 通常,我会使用单引号,如下所示: if ('<%= TempData["Message"]%>' == "") { // code }; if(“”==“”){ //代码 }; 但是,TempData[“Message”]中有单引号(当它包含
if ("<%= TempData["Message"]%>" == "") {
// code
};
如果(“==”){
//代码
};
通常,我会使用单引号,如下所示:
if ('<%= TempData["Message"]%>' == "") {
// code
};
if(“”==“”){
//代码
};
但是,TempData[“Message”]
中有单引号(当它包含由ASP.NET MVC中的Html.ActionLink()帮助程序生成的链接时)。因此,虽然我可以将TempData[“Message”]
中的所有ActionLink帮助程序更改为标记,但这是一个有趣的问题,我很想知道是否有人有答案。打电话。这种方法对ASP.NET4.0是新的;对于早期版本,请使用。我通过编写一个HtmlHelper将字符串编码为Javascript中可接受的格式来解决这个问题:
public static string JSEncode(this HtmlHelper htmlHelper, string source)
{
return (source ?? "").Replace(@"'", @"\'").Replace(@"""", @"\""").Replace(@"&", @"\&").Replace(((char)10).ToString(), "<br />");
}
publicstaticstringjsencode(这个HtmlHelper,字符串源)
{
返回(源??)。替换(@“,@“\”)。替换(@“”,@“\”)。替换(@“&“,@“\”)。替换(((char)10)。ToString(),“
”);
}
那么,在你看来:
if ('<%= Html.JSEncode( TempData["Message"] ) %>' == "") {
// code
};
if(“”==“”){
//代码
};
您可以在Razor视图中使用该方法,如下所示:
if ("@Ajax.JavaScriptStringEncode(TempData["Message"].ToString())" == "") {
// do stuff
}
如果这太冗长,请在/App\u code/JS.cshtml
@helper Encode(string value) {
@(HttpUtility.JavaScriptStringEncode(value))
}
然后可以从任何视图调用:
@JS.Encode("'single these quotes are encoded'")
嗯,我没有.NET4。它做什么?它逃避了一堆角色。使用WPL,这是非常错误的。您不应该将
\r
替换为
标记,还有更多的字符需要转义。具体来说:反斜杠本身(否则\“
转义为\\”
,并用安全含义打断字符串)和其他换行字符。这对我来说很有用,还有我需要编码的信息。自由调整以适应您的个人需求