HtmlTextWriter-将多个类添加到一个标记中
本文关键字:一个 添加 HtmlTextWriter- | 更新日期: 2023-09-27 18:23:48
使用HtmlTextWriter向标记添加多个类的最佳方式是什么?
我想做的是。。。
writer.AddAttribute(HtmlTextWriterAttribute.Class, "Class1");
writer.AddAttribute(HtmlTextWriterAttribute.Class, "Class2");
writer.RenderBeginTag(HtmlTextWriterTag.Table);
导致…
<table class="Class1 Class2">
我很感激我能做…
writer.AddAttribute(HtmlTextWriterAttribute.Class, "Class1 Class2");
然而,在动态构建控件时,它并不总是那么简单。是否有其他方法可以将类"附加"到标记中?
为什么不扩展编写器类并在其上添加AddClass和RemoveClass方法,在渲染时使用所有添加的类名。在内部,你可以使用List_classNames来保持,然后加入它们
writer.AddAttribute(HtmlTextWriterAttribute.Class,string.Join(_classNames.ToArray(),");
希望能有所帮助!
遵循上一篇文章的想法。。。。
public class NavHtmlTextWritter : HtmlTextWriter
{
private Dictionary<HtmlTextWriterAttribute, List<string>> attrValues = new Dictionary<HtmlTextWriterAttribute, List<string>>();
private HtmlTextWriterAttribute[] multiValueAttrs = new[] { HtmlTextWriterAttribute.Class };
public NavHtmlTextWritter (TextWriter writer) : base(writer) { }
public override void AddAttribute(HtmlTextWriterAttribute key, string value)
{
if (multiValueAttrs.Contains(key))
{
if (!this.attrValues.ContainsKey(key))
this.attrValues.Add(key, new List<string>());
this.attrValues[key].Add(value);
}
else
{
base.AddAttribute(key, value);
}
}
public override void RenderBeginTag(HtmlTextWriterTag tagKey)
{
this.addMultiValuesAttrs();
base.RenderBeginTag(tagKey);
}
public override void RenderBeginTag(string tagName)
{
this.addMultiValuesAttrs();
base.RenderBeginTag(tagName);
}
private void addMultiValuesAttrs()
{
foreach (var key in this.attrValues.Keys)
this.AddAttribute(key.ToString(), string.Join(" ", this.attrValues[key].ToArray()));
this.attrValues = new Dictionary<HtmlTextWriterAttribute, List<string>>();
}
}