2012-02-09 10 views
1

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

しかし、コントロールを動的に構築するときは、必ずしも単純なわけではありません。タグにクラスを「追加」する別の方法はありますか?

答えて

3

なぜwriterクラスを拡張し、AddClassメソッドとRemoveClassメソッドを追加して、レンダリング中に追加されたすべてのクラス名を使用するのはなぜですか?内部的にはあなただけ

writer.AddAttribute(HtmlTextWriterAttribute.Class、string.Join(_classNames.ToArray()、 "「)それらを結合、その後、後に保持するためにリスト_classNamesを使用することができます。

希望に役立つこと

を!
1

直前の投稿のアイデアにちょうど従いました....

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>>(); 
    } 
} 
関連する問題