2009-04-30 65 views
7

我正在運行string.Format只讀字符串,其中包含一些HTML + JavaScript,但我得到一個System.FormatException而不是。string.Format拋出HTML + javascript的System.Format異常javascript

這是我的格式字符串:

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

我做的是傳遞對象名稱。就像這樣:

string.Format(javascript, "grid"); 

回答

12

既然你有你需要他們,({{}})增加一倍,以防止格式化從思考他們的令牌逃脫它們串在大括號中。

你的初始化字符串應該是這個樣子:

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

只是出於好奇,是不是標準轉義字符在C#中反斜槓(\\)?也就是說,大括號不應該用「\ {\}」而不是「{{}}」來轉義?我明白雙花括號可以工作,但這是否是最佳做法? – 2009-04-30 20:45:39

+4

因爲他在字符串之前使用了@符號,所以反斜槓將被解釋爲字面上的反斜槓,所以什麼都不會逃脫 – 2009-04-30 20:46:29

6

String.Format需要額外的支架進行轉義。你可能會更好做這樣的事情,這可能是更具可讀性比逃避每個支架,如果你並不需要所有的String.Format的功能:

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