【问题标题】:string.Format throws System.Format exception on HTML + javascriptstring.Format 在 HTML + javascript 上引发 System.Format 异常
【发布时间】:2009-04-30 20:37:02
【问题描述】:

我在包含一些 HTML + javascript 的只读字符串上运行 string.Format,但我得到的是 System.FormatException

这是我的格式字符串:

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

我所做的只是传递对象名称。像这样:

string.Format(javascript, "grid");

【问题讨论】:

    标签: c# .net asp.net string


    【解决方案1】:

    由于字符串中有花括号,您需要通过将它们加倍({{}})来转义它们,以防止格式化程序认为它们是令牌。

    你的字符串初始化应该是这样的:

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

    【讨论】:

    • 只是出于好奇,C# 中的标准转义字符不是反斜杠 (\) 吗?也就是说,大括号不应该用“\{\}”而不是“{{}}”转义吗?我知道双括号可以工作,但这是最佳做法吗?
    • 因为他在字符串前使用了@符号,所以反斜杠将按字面意思解释为反斜杠,所以什么都不会被转义
    • John 是正确的 - 因为它是逐字字符串,所以您可以进行一些转义,所有转义都涉及将字符加倍(即 { 变为 {{,“ 变为 “” 等。 )。
    • 反斜杠用于转义非法 C# 字符。大括号在 C# 字符串中是合法的,它是 string.Format 方法,它期望字符串具有自己的合法格式。
    • @Tomas:\ 是字符串文字的转义字符——即。它用于在字符串文字中输入“特殊”字符。但是,对于格式字符串,您将要转义的字符加倍。为什么?好吧,因为这就是 API 所说的。 API 设计人员为什么要这样做?可能是因为他们还必须使它适用于使用 VB.Net 的人。哪个更容易——向 VB-er 解释放置 \{,或向 C# 用户解释使用 {{?我猜后者要容易得多。
    【解决方案2】:

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

    mystring.Replace("{0}","grid");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      相关资源
      最近更新 更多