Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.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
C# string.Format在HTML+;javascript_C#_.net_Asp.net_String - Fatal编程技术网

C# string.Format在HTML+;javascript

C# string.Format在HTML+;javascript,c#,.net,asp.net,string,C#,.net,Asp.net,String,我在一个只读字符串上运行string.Format,该字符串包含一点HTML+javascript,但我得到了一个System.FormatException 这是我的格式字符串: <script type="text/javascript"> function {0}_showHideFieldWindow() { if ({0}.IsCustomizationWindowVisible()) { {0}.HideCustomizat

我在一个只读字符串上运行
string.Format
,该字符串包含一点HTML+javascript,但我得到了一个
System.FormatException

这是我的格式字符串:

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

由于字符串中有大括号,因此需要通过将它们加倍(
{{{
}}
)来对它们进行转义,以防止格式化程序认为它们是标记

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

String javascript = @"<script type=""text/javascript"">
            function {0}_showHideFieldWindow() {{
            if ({0}.IsCustomizationWindowVisible()) {{
                {0}.HideCustomizationWindow();
            }} else {{
                {0}.ShowCustomizationWindow();
            }}
        }}
    </script>";
stringjavascript=@”
函数{0}\u showHideFieldWindow(){{
如果({0}.IsCustomizationWindowVisible()){{
{0}.HideCustomizationWindow();
}}否则{{
{0}.ShowCustomizationWindow();
}}
}}
";

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

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

出于好奇,C中的标准转义字符不是反斜杠吗?也就是说,大括号不应该用“{\}”而不是“{}}”转义吗?我确实理解双大括号的作用,但这是最佳实践吗?因为他在字符串之前使用@符号,所以反斜杠将被字面解释为反斜杠,因此不会转义任何内容John是正确的-因为它是逐字字符串,所以您可以做一些转义,并且所有这些转义都涉及到字符的加倍(即。{变成{,“变成”等)。反斜杠用于转义非法的C#字符。大括号在C#字符串中是合法的,它是string.Format方法,该方法要求字符串采用其自身的合法格式。@Tomas:the \是字符串文字的转义字符,即用于在字符串文字中输入“特殊”字符。但是,对于格式字符串,可以将字符y加倍你想逃避。为什么?因为API就是这么说的。为什么API设计师要这么做?可能是因为他们还必须让它为使用VB.Net的人工作。哪一个更容易——向VB er解释放{,或者向C#用户解释使用{?我想后者要容易得多。
mystring.Replace("{0}","grid");