Nur*_*MAZ 26 asp.net-mvc tagbuilder razor
TagBuilder是构建HTML元素的一个很好的实现.但是-some-HTML元素可以有另一个元素(我称之为子元素).我找不到Mvc课程的任何课程.
题; 我应该实现几个支持嵌套标签的类(TagBuilderTree和TagBuilderNode),还是我错过了什么?
SLa*_*aks 45
您可以在单独的TagBuilders中构建子元素,并将其生成的HTML放在父TagBuilder中.
这是一个例子:<select>
带有一些<option>
s的例子(例如为了简洁而减肥)
TagBuilder select = new TagBuilder("select");
foreach (var language in languages) // never ye mind about languages
{
TagBuilder option = new TagBuilder("option");
option.MergeAttribute("value", language.ID.ToString());
if (language.IsCurrent)
{
option.MergeAttribute("selected", "selected");
}
option.InnerHtml = language.Description;
// And now, the money-code:
select.InnerHtml += option.ToString();
}
Run Code Online (Sandbox Code Playgroud)
好的,我决定在自己的代码库中进行一些测试。
我比较了这两种方法来创建相同的最终HTML:
使用StringBuilder手动生成html:
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());
使用多个TagBuilder并合并内容:
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());
Run Code Online (Sandbox Code Playgroud)
对我来说,#1更容易阅读,也更简洁,但我也可以欣赏#2的结构。
归档时间: |
|
查看次数: |
21244 次 |
最近记录: |