2009-02-21 7 views
14

Fuera de beneficiarse de Prestación de adaptación para dispositivos alternativos, no es que alguna vez sentido para escribir todo de este código:¿Hay algún beneficio al usar HtmlTextWriter si no va a beneficiarse de la representación adaptativa?

writer.WriteBeginTag("table"); 
writer.WriteBeginTag("tr"); 
writer.WriteBeginTag("td"); 
writer.Write(HtmlTextWriter.TagRightChar); 
writer.WriteEncodedText(someTextVariable); 
writer.WriteEndTag("td"); 
writer.WriteEndTag("tr"); 
writer.WriteEndTag("table"); 

Cuando StringBuilder podría construir lo mismo con simplemente esto:

sb.Append("<table><tr><td>"); 
sb.Append(someTextVariable); 
sb.Append("</td></tr></table>"); 
+0

Ver aquí http: // stackoverflow.com/questions/489691/using-htmltextwriter-to-render-server-controls/489761 # 489761 –

Respuesta

12

Puedo pensar en dos razones para utilizar HtmlTextWriter: a) puede utilizar el escritor para realizar un seguimiento de sus sangrías, de modo que su HTML salido esté formateado muy bien, en lugar de aparecer en una línea yb) HtmlTextWriter suele estar asociado con un flujo de salida, por lo que debería ser más eficiente que crear una cadena larga en la memoria (dependiendo de la cantidad de HTML que esté generando).

Ninguno de estos son motivos extraordinarios, pero son suficientes para convencerme de usar el escritor cuando se necesita eficiencia, o si escribo un control de base que se reutilizará y debe ser lo más profesional posible. Su experiencia puede ser diferente :-).

+0

hola ¿Puede ayudarme por favor a renderizar la salida de HTmltextwriter en la plantilla de correo electrónico de Outlook en una nueva ventana cuando intenté con el HTML? las etiquetas no se representan correctamente <43><41><12><25> ¡Hola mundo! ... los números siguientes aparatos no deben sugerir appear..please – clarifier

2

En algún punto, aún necesita pasar esto a un HtmlTextWriter para poder renderizar al cliente. Supongo que tendrías un escritor final. Escritura (sb.ToString()); allí en el segundo ejemplo. Lo que puede hacer para reducir las líneas de código es escribir HTML sin procesar, exactamente de la misma manera que en su segundo ejemplo de StringBuilder, pero usando HtmlTextWriter.Write.

writer.Write("<table><tr><td>"); 
writer.Write(someTextVariable); 
writer.Write("</td></tr></table>"); 

Luego, parece innecesario usar un StringBuilder. Y, HtmlTextWriter, al menos en cierta medida, se asegurará de que el HTML generado sea compatible (aunque eso no es cierto en el caso anterior, al escribir HTML sin formato).

6

HtmlTextWriter es beneficioso porque:

HtmlTextWriter es el más limpio y el margen de beneficio es muy bien con sangría cuando se representa.

Existe un impacto en el rendimiento ya que HtmlTextWriter escribe directamente en la secuencia de salida. Stringbuilder no escribe en la secuencia de salida hasta que se llame a ToString.

Hay un ejemplo de por qué debería usar HtmlTextWriter para Saving and Reusing HTML Output aquí también.

+0

hola, quiero hacer que la salida HtmlTextWriter en la plantilla de correo electrónico de Outlook en un nuevo window.when probé las etiquetas HTML no están prestando adecuadamente <43><41><12><25> ¡Hola mundo! clarifier

11

Otra ventaja podría ser que con HtmlTextWriter uno podría formatear el código de una manera más limpia (más compatible con el mantenimiento), y que HtmlTextWriter admite la codificación de HTML automáticamente. Compare:

writer.AddAttribute(HtmlTextWriterAttribute.Id, "someId"); 
if (!string.IsNullOrEmpty(cssClass)) writer.AddAttribute(HtmlTextWriterAttribute.Class, cssClass); 
writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "Red"); 
writer.RenderBeginTag(HtmlTextWriterTag.Span); 
writer.WriteEncodedText(text); 
writer.RenderEndTag(); 

frente:

StringBuilder html = new StringBuilder(); 
html.Append("<span"); 
html.Append(" id=\"someId\""); 
if (!string.IsNullOrEmpty(cssClass)) html.AppendFormat(" class=\"{0}\"", HttpUtility.HtmlAttributeEncode(cssClass)); 
html.Append(">"); 
html.Append(HttpUtility.HtmlEncode(text)); 
html.Append("</span>"); 

Se podría argumentar que el código en el segundo ejemplo se puede escribir en una, posiblemente, más limpio, de manera diferente, pero esto podría ser visto como una ventaja de HtmlTextWriter porque básicamente impone una forma canónica de formatear (lo que de nuevo mejora el mantenimiento).

Edit: De hecho, cometí un error en el segundo fragmento, y tuve que volver atrás y corregir la respuesta. Esto confirma el punto que quería hacer.

Cuestiones relacionadas