2010-07-27 17 views
9

Actualmente estoy escribiendo un pequeño sistema de plantillas en ASP.NET para permitir a los usuarios agregar contenido. Por ejemplo, el usuario puede ingresar la cadena (el tipo de variable es cadena).Cómo formatear cadenas en ASP.NET Razor

topHeader[x] = "They think it's all over. It is now!"; 

Sin embargo, un cambio que se necesita es la posibilidad de añadir algunas etiquetas HTML básicas dentro de este contenido, por lo que la siguiente se puede hacer

topHeader[x] = "They think it's all over. <strong>It is now!</strong>"; 

o

topHeader[x] = "They think it's all over. <a title="Football News" href="URL">It is now!</a>"; 

Si se agrega tales cosas en cadenas ahora no están formateadas como HTML, pero quiero escapar de alguna manera para que así sea. Naturalmente, he buscado en Internet la respuesta, pero como Razor es bastante nuevo, no hay mucho por ahí para ayudarme.

¿Alguien tiene una idea de cómo hacer esto?

Respuesta

9

Necesita crear una implementación IHtmlString con su fuente HTML.

Razor planea tener un método de ayuda a hacer esto para usted, pero, que yo sepa, lo hace todavía no, por lo que creo que necesita para crear su propia clase que implementa la interfaz y devuelve el código HTML de la GetHtmlString() método.
EDIT: Puede utilizar la clase HtmlString.

Usted puede cambiar su diccionario topHeader para mantener IHtmlString s en lugar de String s, o puede dejar su código como está, pero se envuelve en una HtmlString en la vista de la maquinilla de afeitar:

<tag>@new HtmlString(topHeader[x])</tag> 

Asegúrese de escape correctamente cualquier carácter especial que no sea HTML.

4

SLaks es correcto, pero no es necesario que escriba su propia implementación de IHtmlString, hay uno integrado en System.Web llamado HtmlString. Entonces:

topHeader[x] = new HtmlString("They think it's all over. <a title=\"Football News\" href=\"URL\">It is now!</a>"); 

Debería hacer el truco.

+0

He intentado esto, pero reciben "CS0029: No se puede convertir implícitamente el tipo 'System.Web.HtmlString' a 'cadena'" Cualquier idea de lo que estoy haciendo ¿incorrecto? –

+1

@EnderMB: cambie el diccionario para que contenga 'IHtmlString' u' object'. – SLaks

9

El método de ayuda que agregaron se llama Html.Raw() y es mucho más limpio.

Aquí se muestra un ejemplo:

@Html.Raw("Hello <a>World</a>!") 
+0

¡Esto funcionó como un encanto! Y es más fácil que las otras respuestas proporcionadas. – sksallaj