2009-04-30 17 views
7

Estoy ejecutando string.Format en una cadena de solo lectura que contiene un poco de HTML + javascript pero obtengo un System.FormatException en su lugar.string.Format lanza la excepción System.Format en HTML + javascript

Ésta es mi formato de cadena:

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

todo lo que estoy haciendo está pasando en el nombre del objeto. De esta manera:

string.Format(javascript, "grid"); 

Respuesta

12

Puesto que usted tiene las llaves en la cadena que necesita para escapar de ellos doblando hacia arriba ({{ y }}) para evitar que el formateador de pensar que son fichas.

Su cadena de inicialización debe ser algo como esto:

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

Sólo por curiosidad, no es el carácter de escape estándar en C# una barra invertida (\\)? Es decir, ¿no deberían escaparse las llaves con "\ {\}" en lugar de "{{}}"? Entiendo que las llaves dobles funcionan, pero ¿es la mejor práctica? –

+4

Como está usando el símbolo @ antes de la cadena, una barra invertida se interpretará literalmente como una barra invertida, por lo que no se escaparía nada –

+1

John está en lo cierto, ya que es una cadena literal hay algunos escapes que puedes hacer y todos implican doblando el carácter (es decir, {se convierte en {{, "se convierte en" ", etc.). –

6

String.Format necesidades de los soportes adicionales que se escaparon. Usted puede ser mejor hacer algo como esto, que podría ser más fácil de leer que escapa cada soporte si no necesita toda la funcionalidad String.Format 's:

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

+1 así es como lo resolví originalmente. –

+0

+1 Esto sería más simple y también sería un poco más rápido. –

Cuestiones relacionadas