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");

然而,在动态构建控件时,它并不总是那么简单。是否有其他方法可以将类"附加"到标记中?

HtmlTextWriter-将多个类添加到一个标记中

为什么不扩展编写器类并在其上添加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>>();
    }
}