2009-04-30 3 views
7

Ich bin string.Format auf einem Readonly String ausgeführt, der ein bisschen HTML + Javascript enthält, aber ich bekomme stattdessen eine System.FormatException.string.Format wirft System.Format Ausnahme auf HTML + Javascript

Das ist mein Format-String:

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

Alles, was ich tue, ist in dem Objektnamen übergeben. Wie folgt aus:

string.Format(javascript, "grid"); 

Antwort

12

Da Sie geschweiften Klammern in der Zeichenfolge, die Sie brauchen, sie zu entkommen, indem sie verdoppeln ({{ und }}) die Formatierungs um zu verhindern, denken sie Token sind.

Ihre Initialisierungszeichenfolge sollte wie folgt aussehen:

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

Nur aus Neugier, sind nicht die Standard-Escape-Zeichen in C# ein umgekehrter Schrägstrich (\\)? Das heißt, sollten die geschweiften Klammern nicht mit "\ {\}" anstatt "{{}}" versehen werden? Ich verstehe, dass die Doppelspangen funktionieren, aber ist es die beste Praxis? –

+4

Da er das @ -Symbol vor der Zeichenfolge verwendet, wird ein umgekehrter Schrägstrich wörtlich als umgekehrter Schrägstrich interpretiert, so dass nichts entgangen wäre. –

+1

John ist richtig - da es eine wortwörtliche Zeichenfolge ist, gibt es ein paar Escapezeichen, die Sie ausführen können Verdoppelung des Zeichens (zB {werden {{, "wird", usw.). –

6

String.Format braucht die zusätzlichen Klammern entgangen sein. Sie könnten besser dran, so etwas wie dies zu tun, sein, die als Flucht jede Klammer besser lesbar sein könnten, wenn Sie String.Format ‚s-Funktionalität nicht alle brauchen:

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

+1, so habe ich es ursprünglich gelöst. –

+0

+1 Das wäre einfacher und wäre auch ein bisschen schneller. –