为什么有一个使用大括号({})的字符串的FormatException?

时间:2011-09-14 22:24:18

标签: c# string formatting

我正在尝试创建一个简单的JavaScript文件,从后面的代码中注入,并希望将变量名称附加到消息。

 string javascript = string.Format
                            (
                                @"var msg = '{0} ';
                                 if(confirm(msg))
                                {                                          
                                    hdnfield.value='Yes';
                                } else {
                                    hdnfield.value='No';
                                }
                                    submit();", variableName);

但获得FormatException。这样做的正确方法是什么?

一如既往地谢谢。

2 个答案:

答案 0 :(得分:4)

if / else语句中的大括号不会被转义,这会导致对string.Format的调用出现问题,该调用使用大括号来指示占位符。

string javascript = string.Format
    (
        @"var msg = '{0} ';
         if(confirm(msg))
        {{                                          
            hdnfield.value='Yes';
        }} else {{
            hdnfield.value='No';
        }}
            submit();", variableName);

答案 1 :(得分:0)

我认为你的意思是你将整个文件送入ASP.NET中的String.Format(format, value1, value2, value3...)

如果是这样的话,你在使用Javascript时会遇到问题,因为它会将每个开始和结束大括号解释为要替换的标记的开头或结尾。

您可能最好在模板中使用某种占位符,例如##MYTOKEN##$$SOMEVALUE$$,将该文件加载到字符串中并使用一些String.Replace(whatToReplace, whattoReplaceItWith)函数来执行替换

意味着你可以定义自己的规则来取代什么 String.Format非常灵活且功能强大,但内容中没有未转义的花括号。