如何将带双引号的转义c#字符串转换为带双引号的转义javascript字符串

如何将带双引号的转义c#字符串转换为带双引号的转义javascript字符串,javascript,c#,asp.net-mvc,c#-4.0,razor,Javascript,C#,Asp.net Mvc,C# 4.0,Razor,当我试图在javascript中使用带转义符号的字符串时,我有一个问题 在视图的顶部,我以如下方式初始化变量: @{ var lol = "hello \"mister sir\" I am quotes"; } 在javascript中,我尝试了不同的变体。出于测试目的,我编写了小函数: $selector = $('#some-button'); function test(str) { $selector.html(str); alert(

当我试图在javascript中使用带转义符号的字符串时,我有一个问题

在视图的顶部,我以如下方式初始化变量:

@{ var lol = "hello \"mister sir\" I am quotes"; }
在javascript中,我尝试了不同的变体。出于测试目的,我编写了小函数:

    $selector = $('#some-button');
    function test(str) {
        $selector.html(str);
        alert(str);
    }
以下是我的尝试:

  • javascript转义。它可以在警报或html内容中正常工作

    test("hello \"mister sir\" I am quotes");
    
  • HTMLATTRIBUTENCODE或HtmlEncode。它们并非在所有情况下都有效。它显示
    hello&;引用;先生及;引用;我是alert中的引号
    ,我是html内容中的引号

    test("@HttpUtility.HtmlAttributeEncode(lol)");
    test("@HttpUtility.HtmlEncode(lol)");
    
  • 默认的c#或JavaScriptStringEncode。它们在警报中不起作用。它在警报中显示
    你好“先生先生”我是引号

    test("@Ajax.JavaScriptStringEncode(lol)");
    test("@lol");
    test("@HttpUtility.JavaScriptStringEncode(lol)");
    
  • Html.Raw()。根本不管用。它使用未替换的双引号来分隔标记

    test("@Html.Raw(lol)");
    

  • 您能帮我介绍一些可以作为javascript变体(1)使用的方法吗?

    通常,最好使用您最喜欢的JSON序列化程序对要注入javascript的任何值进行编码。这将自动在字符串周围添加双引号,并适当转义字符串中的任何内容:

    test(@Html.Raw(JsonConvert.Serialize(lol)));
    

    javascript对html一无所知,尽管它通常都嵌入在html中。您必须为字符串生成有效的javascript表示,最简单的方法是将其编码为
    json
    。对于字符串文本,您将转义双引号,但是字符串
    lol
    中没有反斜杠,因此
    lol
    中的任何字符都不会转义。一个包含转义字符的文本看起来像这样的
    “你好\\\\\”先生\\\\\\“我是引号”“
    是的,这是一个好办法。这个解决方案并不漂亮,但至少是可行的。谢谢