HtmlTextWriter - Добавление нескольких классов в тег
Каков наилучший способ добавить несколько классов в тег, используя 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");
Однако это не всегда так просто при динамическом построении элемента управления. Есть ли альтернативные способы "добавить" классы в тег?
2 ответа
Решение
Почему бы не расширить класс Writer и добавить к нему методы AddClass и RemoveClass, которые при рендеринге используют все добавленные имена классов. Внутренне вы можете использовать список _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>>();
}
}