string.Format在HTML + javascript上抛出System.Format异常

Jam*_*res 7 .net c# asp.net string

我正在运行string.Format一个包含一些HTML + javascript的readonly字符串,但我得到了一个System.FormatException.

这是我的格式字符串:

<script type="text/javascript">
    function {0}_showHideFieldWindow() {
        if ({0}.IsCustomizationWindowVisible()) {
            {0}.HideCustomizationWindow();
        } else {
            {0}.ShowCustomizationWindow();
        }
    }
</script>
Run Code Online (Sandbox Code Playgroud)

我正在做的就是传递对象名称.像这样:

string.Format(javascript, "grid");
Run Code Online (Sandbox Code Playgroud)

And*_*are 12

由于你在字符串中有大括号,你需要通过将它们加倍({{}})来逃避它们,以防止格式化程序认为它们是标记.

您的字符串初始化应如下所示:

String javascript = @"<script type=""text/javascript"">
            function {0}_showHideFieldWindow() {{
            if ({0}.IsCustomizationWindowVisible()) {{
                {0}.HideCustomizationWindow();
            }} else {{
                {0}.ShowCustomizationWindow();
            }}
        }}
    </script>";
Run Code Online (Sandbox Code Playgroud)

  • 由于他在字符串之前使用@符号,因此反斜杠将被解释为反斜杠,因此不会转义任何内容 (4认同)
  • @Tomas:\是字符串文字的转义字符 - 即.它用于将"特殊"字符输入到字符串文字中.但是,对于格式字符串,您要将要转义的字符加倍.为什么?好吧,因为这就是API所说的.为什么API设计师会这样做?可能是因为他们还必须让它适用于使用VB.Net的人.哪个更容易 - 向VB-er解释放置\ {,或向C#用户解释使用{{?我猜后者要容易得多. (3认同)
  • 反斜杠用于转义非法的C#字符.大括号在C#字符串中是合法的,它是string.Format方法,它期望字符串具有自己的合法格式. (2认同)

Kel*_*tex 6

String.Format需要额外的括号进行转义.你可能最好做这样的事情,如果你不需要所有String.Format的功能,这可能比转义每个括号更具可读性:

mystring.Replace("{0}","grid");
Run Code Online (Sandbox Code Playgroud)