2009-12-04 14 views
28

¿Cuál es el uso apropiado de estos dos controles? De vez en cuando, creo HTML en el código subyacente. A veces quiero dar salida al espacio en blanco y termino haciendo algo como esto.¿Cuándo usar Literal vs LiteralControl?

const string twoSpaces = "  "; 
p.Controls.Add(new Literal { Text = twoSpaces }); 

o

const string twoSpaces = "  "; 
p.Controls.Add(new LiteralControl { Text = twoSpaces }); 

Mi pregunta es, ¿es esto un uso apropiado de estos controles? ¿Debo agregar espacios en blanco de esta manera? ¿Cuándo uso uno sobre el otro?

Me di cuenta de que probablemente podría hacer algo con CSS, pero realmente quiero saber cuáles son los propósitos de estos dos controles, y ¿hay algo intrínsecamente incorrecto en su uso de esta manera?

Respuesta

34

Literal usa ViewState y recordará cualquier actualización de sus propiedades en las devoluciones. LiteralControl debe tener sus propiedades establecidas en cada devolución de datos.

Aparte de eso, tenga mucho cuidado al usar Literal. Si permite que la entrada del usuario se represente en una etiqueta literal, es muy probable que haya abierto un ataque XSS.

+3

+1. Existe alguna protección disponible en HttpUtility.HtmlEncode() o en la biblioteca Anti-XSS de Microsoft más segura pero ligeramente más lenta, pero como Chris dijo, tenga mucho cuidado con la entrada del usuario en Literal/LiteralControl. – Broam

9

Chris Pitman ha respondido correctamente, pero solo quiero agregar más datos sobre ambos.

Literal es un control que se puede agregar tanto en una página aspx como en el código subyacente.

asp:Literal Text="text" runat="server"

Pero LiteralControl no se puede añadir en la página aspx, pero sólo para el código subyacente. Es por eso que LiteralControl no tiene su ViewState asociado a la clase de página.

Cuestiones relacionadas