2011-04-04 13 views
8

que tienen un modelo simple:Cómo usar Razor como asp: ¿Literal?

public class MyModel 
{ 
    public string Text{get;set;} 
} 

tengo una visión, lo que hace que la propiedad Texto de MyModel:

<p>@Model.Text</p> 

¿Cómo puedo hacer que las etiquetas HTML de texto como etiquetas? Por ejemplo, tengo el texto "<b>Text</b>". Quiero conseguir el texto en negrita dentro de la etiqueta p como resultado:

texto

Pero Razor muestra texto como es:

<b>Text</b> 

Respuesta

19

creo que es necesario usarlo como:

<p>@Html.Raw(Model.Text)</p> 

Puede encontrar más información here en el blog de Phil Haack.

anurse señala en los comentarios que usted podría, alternativamente, establecer el tipo de la Text miembro de su tipo de modelo Ver como IHtmlString y sólo tiene que utilizar @Model.Text a la salida de la misma. ASP.NET MVC es lo suficientemente inteligente como para darse cuenta de que la salida no se debe escapar.

+3

Esta es una buena solución cuando desea representar algún contenido sin codificación HTML ocasionalmente. Cuando sabe que una propiedad de su modelo siempre va a ser contenido HTML que no debe codificarse automáticamente, debe crear el tipo de esa propiedad IHtmlString. Por lo tanto, si cambia el texto para que sea un IHtmlString en lugar de una cadena, puede escribir @ Model.Text y Razor generará las etiquetas correctamente. De esta forma, es claro que cierto contenido es HTML y debe ser cuidadosamente desinfectado para evitar ataques de inyección HTML. –

+0

@anurse: Wow, gran comentario. No lo sabía yo mismo. Actualizaré la respuesta para agregar esta información también. – paracycle

Cuestiones relacionadas