tag net mvc for asp asp.net razor html-encode

asp.net - net - razor partial



Emitir cadenas no codificadas en una vista Razor (4)

Este es mi enfoque favorito:

@Html.Raw("<p>my paragraph text</p>")

Fuente fue la referencia de sintaxis Razor de Phil Haack: http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx

Como ScottGu dice en su publicación de blog «por defecto, el contenido emitido usando un bloque @ se codifica automáticamente en HTML para proteger mejor contra los escenarios de ataque XSS». Mi pregunta es: ¿cómo se puede generar una cadena no codificada en HTML?

En aras de la simplicidad, los pls se apegan a este simple caso:

@{ var html = "<a href=''#''>Click me</a>" // I want to emit the previous string as pure HTML code... }


Puede crear una nueva instancia de MvcHtmlString que no recibirá codificación HTML.

@{ var html = MvcHtmlString.Create("<a href=''#''>Click me</a>") }

Esperemos que haya una manera más fácil en el futuro de Razor.

Si no está utilizando MVC, puede intentar esto:

@{ var html = new HtmlString("<a href=''#''>Click me</a>") }


También me encontré con este problema al hacer la transición de nuestro proyecto al nuevo motor Razor view. El enfoque que tomé fue ligeramente diferente porque teníamos que generar datos JSON desde C # y queríamos generarlos al cargar la página.

Lo que eventualmente hice fue implementar un RawView que era un paralelo de View dentro de los archivos cshtml. Esencialmente, para obtener una cadena sin procesar,

@(new HtmlString(View.Foo)) // became @RawView.Foo

Esto requiere algunos cambios en el diseño del proyecto, así que acabo de escribir una publicación en el blog here . En resumen, esto requirió una implementación duplicada de DynamicViewDataDictionary de MVC y una nueva WebViewPage que contiene RawView. También seguí adelante e implementé el operador de índice en RawView para permitir

@RawView["Foo"]

En el caso de que alguien necesite pasar los datos por una lista de claves.

Al leer el comentario de una enfermera, probablemente hubiera sido mejor si hubiera nombrado esto como un Literal en lugar de RawView.


nuevo HtmlString es definitivamente la respuesta.

Investigamos otros cambios en la sintaxis de la afeitadora, pero finalmente ninguno de ellos terminó siendo más corto que el nuevo HtmlString.

Sin embargo, podemos envolverlo en un ayudante. Posiblemente...

@Html.Literal("<p>something</p>")

o

@"<p>something</p>".AsHtml()