bien, decidí hacer una pequeña prueba en mi propia base de código.
I compararon estos dos métodos para crear exactamente el mismo HTML final:
- generar manualmente el html usando un StringBuilder
- El uso de múltiples TagBuilders y anidando el contenido
generar manualmente el html utilizando un StringBuilder:
var sb = new StringBuilder();
sb.AppendLine("<div class='control-group'>");
sb.AppendFormat(" <label class='control-label' for='{0}_{1}'>{2}</label>", propObj.ModelType, propObj.ModelProperty, propObj.LabelCaption);
sb.AppendLine(" <div class='controls'>");
sb.AppendFormat(" <input id='{0}_{1}' name='{0}[{1}]' value='{2}' />", propObj.ModelType, propObj.ModelProperty, propObj.PropertyValue);
sb.AppendLine(" </div>");
sb.AppendLine("</div>");
return new HtmlString(sb.ToString());
U cantar múltiples TagBuilders y la fusión del contenido:
TagBuilder controlGroup = new TagBuilder("div");
controlGroup.AddCssClass("control-group");
TagBuilder label = new TagBuilder("label");
label.AddCssClass("control-label");
label.InnerHtml = propObj.LabelCaption;
TagBuilder controls = new TagBuilder("div");
TagBuilder input = new TagBuilder("input");
input.Attributes["id"] = propObj.ModelType + "_" + propObj.ModelProperty;
input.Attributes["name"] = propObj.ModelType + "[" + propObj.ModelProperty + "]";
input.Attributes["value"] = propObj.PropertyValue;
controls.InnerHtml += input;
controlGroup.InnerHtml += label;
controlGroup.InnerHtml += controls;
return new HtmlString(controlGroup.ToString());
Para mí, # 1 es más fácil de leer y mucho más concisa, pero puedo apreciado sin la estructura de # 2 también.
Prefiero implementar TagBuilderTree y TagBuilderNode encapsulará etiquetas anidadas para nuestros proyectos, pero trato de encontrar la respuesta ¿por qué Razor no las sirve? Porque parece que es necesario para todos los usuarios de Razor –
Se refiere a las páginas web, no a Razor. No es necesario para todos los desarrolladores; puedes usar ayudantes estáticos en su lugar. – SLaks
tienes razón, hablo de la clase System.Web.Mvc.TagBuilder. No tiene relación directa con el motor Razor. Todos los motores pueden usarlo ... Me pregunto por qué no tenemos TagBuilder como árbol y debería usar TagBuilder para las etiquetas html anidadas. ¿O debería implementar mis propias clases TagBuilderTree y TagBuilderNode? –