2011-12-12 14 views
6

Tengo una variable dentro del elemento.Nombre que contiene la cadena "¡Es martes!". Para aliviar los errores de javascript, en el controlador C# ya he escapado de esta cita simple. En la página web, aparece así: "¡Es martes!".Cita simple de escape de una variable MVC 3 Razor View

Esto al menos evita cualquier error de javascript, sin embargo, no quiero que la cadena real que se muestra contenga la barra invertida que se le escapó.

¿Cómo podré revertir el escape una vez que los errores de javascript ya se hayan solucionado? Esto se siente como un problema bastante simple, pero estoy un poco familiarizado con MVC 3. ¡Cualquier pista es muy apreciada! Mi búsqueda no encontró ningún ejemplo específico para esto.

Un ejemplo de mi código en la Navaja Vista:

@foreach (var item in Model) 
{ 
    @Html.DisplayFor(modelItem => item.Name) // item.Name = "It\'s Tuesday!" 
} 
+0

¿Por qué está escapando del carácter de cita "para aliviar los errores de JavaScript" cuando no hay javascript presente en su ejemplo? –

+0

Es cierto, no hay javascript en mi ejemplo. Mi ejemplo fue un fragmento muy básico para mostrar cómo th La cadena en cuestión de la que intento eliminar una barra invertida se muestra en la Vista Razor. Por supuesto, hay javascript en la página de la solución real. –

+0

mientras estoy seguro de que hay javascript en su página, aún no tiene sentido para mí el motivo por el cual está tratando de evitar una cita en una cadena que se pretende representar como HTML para una etiqueta. No puedo entender por qué estás escapando allí. –

Respuesta

21

Cree un método de extensión que puede usar o simplemente codificar directamente. No me codificar antes de la vista de conseguir que a menos que tenga una propiedad separada en su modelo de vista significaba para esto (no es una mala idea()

Esto no es probado, pero algo en este sentido

 

public static class HtmlExtensions 

{ 
    public static IHtmlString JavaScriptEncode(this HtmlHelper html, string item) 
    { 
     return new HtmlString(HttpUtility.JavaScriptStringEncode(item)); 
    } 
} 
 

Usted puede llamar a @ Html.JavaScriptEncode (yourProperty) desde la vista o simplemente hacer referencia al nombre de su propiedad codificada

+0

Este método funcionó muy bien, ¡gracias! Acabo de hacer un método de extensión para llamar, y luego dejo que el método elimine el retroceso. Si bien quizás no sea la mejor manera de solucionar este problema, sí funcionó, al tiempo que apaciguaba el Javascript. –

10

Lo siguiente puede ser usado para prevenir la codificación de la salida de nuevo. Sin embargo, esto depende de que usted se ocupe adecuadamente de usted.

MVCHTMLString

@MvcHtmlString.Create(yourString) 
+0

Lo usé junto con la extensión Método. ¡Gracias por tu publicación! Desafortunadamente, solo puedo marcar 1 respuesta como correcta, y no puedo votar debido a su baja reputación. Sin embargo, su tiempo es apreciado, ¡por lo que sea que valga! –

+0

Y realmente necesitaba el impulso :-) – RubbleFord

0

Prefiero hacer mis puntos de vista mudo. Por lo tanto, tendría una propiedad llamada algo como 'Display' o 'DisplayName' que manejaba el escape de la vista.

Cuestiones relacionadas