Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript内的内联c#脚本中转义双引号_C#_Javascript_Asp.net Mvc_Escaping - Fatal编程技术网

在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”]中有单引号(当它包含

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

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
替换为

标记,还有更多的字符需要转义。具体来说:反斜杠本身(否则
\“
转义为
\\”
,并用安全含义打断字符串)和其他换行字符。这对我来说很有用,还有我需要编码的信息。自由调整以适应您的个人需求