2011-12-06 15 views
7

¿Hay alguna manera de utilizar TextBoxFor helper con texto codificado?MVC3 TextBoxFor con texto codificado

por ejemplo: Cuando se utiliza el siguiente ayudante de MVC3 Con Razor vista motor:

@Html.TextBoxFor(model => model.Description) 

y el valor de model.Description está codificada, por ejemplo:

<script>alert();'</script> 

el resultado se cuadro de texto con la cadena codificada, cuando el resultado deseado es un cuadro de texto con la cadena descodificada:

<script>alert();'</script> 

¿Hay una manera de utilizar la MVC TextBoxFor con cadena codificada en lugar de utilizar

@Html.TextBox("Description", Server.HtmlDecode(Model.Description)) 

?

+1

Me da la impresión de que se puede ser sobre-codificación cosas en alguna parte. ¿Por qué el contenido está codificado en la base de datos? En general, debería * no * ser: debe codificar al mostrar, en los casos en los que está protegiendo contra la inyección. Codificando mientras guarda y decodifica cuando la edición está plagada de errores y complicaciones. –

+0

Creo que tiene razón, pero es bueno saber en los casos en que los datos se guardan en la base de datos codificada. Supongo que el otro método con @ html.TextBox es la mejor solución por ahora. – Erann3

Respuesta

5

Tienes que html-decodificar tu cadena.

Utilice el System.Web.HttpUtility.HtmlDecode para eso.

System.Web.HttpUtility.HtmlDecode("&lt;script&gt;alert();&#39;&lt;/script&gt;") 

dará lugar a

<script>alert();'</script> 

TextBoxFor no admite que es así, tienes 2 opciones

1. Decodificar antes de la visualización

@{ 
     Model.Description = System.Web.HttpUtility.HtmlDecode(Model.Description); 
    } 
    @Html.TextBoxFor(model => model.Description) 

2. Uso @ Html.TextBox para este

@Html.TextBox("Description", System.Web.HttpUtility.HtmlDecode(Model.Description)) 

esperanza esto ayuda

+0

Gracias por la respuesta, pero las dos opciones no son muy diferentes de lo que sugerí, probablemente la solución más cercana por el momento. – Erann3

Cuestiones relacionadas