2010-09-21 62 views
5

Necesito escapar una comilla doble en C# en línea dentro de javascript. Código es el siguiente:Escapar una comilla doble en script C# en línea dentro de javascript

if ("<%= TempData["Message"]%>" == "") { 
    // code 
}; 

Normalmente, yo sólo tiene que utilizar comillas simples, así:

if ('<%= TempData["Message"]%>' == "") { 
    // code 
}; 

Sin embargo, TempData["Message"] tiene comillas simples dentro de ella (cuando contiene un enlace generado por el Html.ActionLink () ayuda en ASP.NET MVC). Entonces, si bien podría cambiar todos los ayudantes de ActionLink dentro de TempData["Message"] a las etiquetas, es un problema interesante y me gustaría escuchar si alguien tiene una respuesta.

Respuesta

8

Llame HttpUtility.JavaScriptStringEncode.
Este método es nuevo para ASP.Net 4.0; para versiones anteriores, use el WPL.

+0

Hmm, no tengo .NET 4. ¿Qué hacer? – ajbeaven

+0

Se escapa de un montón de personajes. Use WPL. – SLaks

+1

Ajax.JavaScriptStringEncode parecía funcionar. ¿Cualquier comentario? – ajbeaven

0

he abordado esta escribiendo una HtmlHelper que codifica las cadenas a un formato aceptable en Javascript:

public static string JSEncode(this HtmlHelper htmlHelper, string source) 
{ 
    return (source ?? "").Replace(@"'", @"\'").Replace(@"""", @"\""").Replace(@"&", @"\&").Replace(((char)10).ToString(), "<br />"); 
} 

Luego, en su opinión:

if ('<%= Html.JSEncode(TempData["Message"]) %>' == "") { 
    // code 
}; 
+0

Eso está muy mal. No debe reemplazar '\ r' con las etiquetas'
', y hay más caracteres de los que debe escapar. – SLaks

+0

Específicamente: barra invertida en sí misma (de lo contrario '\" 'se escapó a' \\ "' y rompe la cadena con implicaciones de seguridad) y otros caracteres de nueva línea. – bobince

+0

Esto es lo que funciona para mí y los mensajes que necesito codificar. Siéntase libre de adaptarse a sus necesidades individuales – Clicktricity

2

Usted puede utilizar el método AjaxHelper.JavaScriptStringEncode interior una vista Razor, como esta:

if ("@Ajax.JavaScriptStringEncode(TempData["Message"].ToString())" == "") { 
    // do stuff 
} 

Si eso es demasiado detallado, cree t su pequeño ayudante en /App_Code/JS.cshtml

@helper Encode(string value) { 
    @(HttpUtility.JavaScriptStringEncode(value)) 
} 

que luego se puede llamar desde cualquier punto de vista:

@JS.Encode("'single these quotes are encoded'") 
Cuestiones relacionadas