OK, tôi quyết định làm một thử nghiệm nhỏ trong cơ sở mã của riêng tôi.
tôi so hai phương pháp để tạo ra chính xác cùng HTML thức:
- thủ tạo ra html sử dụng một StringBuilder
- Sử dụng nhiều TagBuilders và làm tổ nội dung
thủ tạo ra html sử dụng một 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 hát nhiều TagBuilder và hợp nhất nội dung:
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());
Với tôi, # 1 dễ đọc hơn và ngắn gọn hơn nhiều, nhưng tôi cũng có thể đánh giá cao cấu trúc của số 2.
Tôi thích triển khai TagBuilderTree và TagBuilderNode nó sẽ đóng gói các thẻ lồng nhau cho các dự án của chúng tôi nhưng tôi cố gắng tìm câu trả lời tại sao Razor không phục vụ chúng? Bởi vì nó trông giống như cần thiết cho tất cả người dùng Razor –
Bạn có nghĩa là các trang Web, chứ không phải Dao cạo. Nó không cần thiết cho tất cả các nhà phát triển; bạn có thể sử dụng trình trợ giúp tĩnh thay thế. – SLaks
bạn nói đúng, tôi nói về lớp System.Web.Mvc.TagBuilder. Nó không có liên quan trực tiếp với công cụ Razor. Tất cả các công cụ có thể sử dụng nó .. Tôi tự hỏi tại sao chúng ta không có TagBuilder như cây và tôi nên sử dụng TagBuilder cho các thẻ html lồng nhau. Hoặc tôi có nên triển khai các lớp TagBuilderTree và TagBuilderNode của riêng mình không? –