2009-04-30 20 views
7

HTML + javascript biraz içeren bir okuma dizesinde string.Format çalıştırıyorum ancak bunun yerine bir System.FormatException olsun.string.Format, HTML + javascript üzerinde System.Format istisnası atar

Bu benim biçim dizesi:

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

i nesne adı geçiyor yapıyorum Tümü. Şunun gibi:

string.Format(javascript, "grid"); 

cevap

12

Eğer onlar jetonladır düşünmekten biçimlendirici önlemek için ({{ ve }}) onları iki katına onları kaçmak gerekir dizesinde küme parantezi olduğundan.

Sizin dize başlatma şöyle görünmelidir:

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

, standart kaçış karakteri değildir: String.Format 'ın tüm işlevselliği gerekmiyorsa Her braket kaçan daha okunabilir olabilir böyle bir şey yapıyor daha iyi olabilir C# ters eğik çizgi (\\)? Yani, küme parantezleri "{{}}" yerine "\ {\}" ile kaçmamalı mıdır? Çift parantezlerin çalıştığını anlıyorum, ama en iyi uygulama mı? –

+4

Dizeden önce @ sembolünü kullandığı için, ters eğik çizgi anlamsız olarak ters eğik çizgi olarak yorumlanacaktır, bu nedenle hiçbir şey atlanmayacaktır –

+1

John doğrudur - bir söz dizimi olduğu için yapabileceğiniz birkaç kaçış vardır ve bunların hepsi Karakterin iki katına çıkarılması (yani {hale {{, "" olur ", vb.). –

6

String.Format ekstra parantez kaçtı gerekmektedir.

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

+1 aslında ben bunu çözdüm. –

+0

+1 Bu daha basit olurdu ve biraz daha hızlı olurdu. –

İlgili konular