2011-06-24 12 views
5

He notado un error muy molesto (posible) en el asistente TextAreaFor HTML de ASP.NET MVC. Por alguna razón, el ayudante de HTML agrega un NewLine antes de cualquier contenido en el área de texto. Aparentemente, esto es para combatir el posible problema del contenido de un individuo que comienza con una nueva línea a propósito, y el navegador lo ignora según la especificación.ASP.NET MVC Textarea Ayuda HTML agregando líneas al usar AntiXssLibrary

Sin embargo, mediante la adición, me sale el error mucho más molesto que ahora en todos mis áreas de texto tiene automáticamente una línea adicional antes de cualquier contenido en carga de forma (es decir, esto se manifiesta antes de cualquier contenido en mi campo: ) . Parece que algo está codificando la "nueva línea" antes de escupirla.

¿Alguien tiene una solución para esto? Yo esperaría que el comportamiento previsto es que se imprima

<textarea> 
    Stuff</textarea> 
no

la

<textarea>&#13;&#10;Stuff</textarea> 

estoy recibiendo ...

Editar Tras una posterior inspección, Parece que esto se debe a mi uso de AntiXssLibrary para la codificación en lugar del HtmlEncoder predeterminado. Estoy utilizando la versión 4.0, y mi método de clase codificador se ve así:

protected override void HtmlEncode(string value, TextWriter output) 
    { 
     output.Write(Microsoft.Security.Application.Encoder.HtmlEncode(value)); 
    } 

Así que mi pensamiento es que, dado que la clase TagBuilder, que se llama desde el TextAreaHelper, HTML codifica el contenido de la etiqueta, que está asumiendo el comportamiento del codificador HTML predeterminado, pero AntiXssLibrary es más completo y, por lo tanto, ¿ves este comportamiento?

+0

He probado esto en uno de nuestros sitios MvC3 de trabajo y no ven el comportamiento que describes . Tal vez podrías publicar más información. – JasonG

+0

Esto me golpea CADA VEZ que comienzo un nuevo proyecto. Por cierto, solo estoy viendo este comportamiento con Firefox, no con IE o Chrome hasta el momento. – mxmissile

Respuesta

8

Después de hacer un poco de excavación de código, he encontrado que mi pensamiento es correcto. El MVC3 TextArea HTML ayudante utiliza la clase TagBuilder, y hace lo siguiente:

tagBuilder.SetInnerText(Environment.NewLine + value); 

Como SetInnerText llama HttpUtility.Encode sobre el contenido del argumento pasado a ella, esto se traduce en el codificador por defecto que se llama no sólo en el real VALUE, pero también en este Environment.NewLine, lo que significa que si no está utilizando el HtmlEncoder predeterminado (como AntiXssLibrary en su lugar), podría haber algún comportamiento inesperado, como este.

La solución sería para ellos en lugar de llamar al:

tagBuilder.InnerHtml = Environment.NewLine + HttpUtility.Encode(value); 

he presentado un informe de error.

Por el momento, yo estoy poniendo en práctica una solución Javascript onLoad para eliminar la codificación infractor de todas las áreas de texto:

$("textarea").each(function() { $(this).val($(this).val().trim()); }); 
+1

Gracias esto me ayudó (+1) pero tuve que cambiar el js a $ ("textarea"). Cada uno (función() {$ (this) .val ($. Trim ($ (this) .val()));}); para que funcione en ie8 (ver http://stackoverflow.com/questions/3439316/ie8-and-jquerys-trim) – Adam

+1

¿Tiene una URL para el error que archivó? Me gustaría hacer un seguimiento ya que este mismo problema nos está afectando. – Jacob

+1

http: //aspnet.codeplex.com/workitem/8848 –

Cuestiones relacionadas