System.Web.UI.WebControls.Table/Cell/Rowから派生して遊んでいますが、HtmlTextWriter.AddAttributeを機能させることができません。
テーブル:
public class Table : System.Web.UI.WebControls.Table
{
public string Title { get; set; }
public bool Sorted { get; set; }
public Table()
{
}
}
テーブルヘッダー行:
public class TableHeaderRow : System.Web.UI.WebControls.TableHeaderRow
{
public TableHeaderRow()
{
this.TableSection = TableRowSection.TableHeader;
this.ClientIDMode = System.Web.UI.ClientIDMode.Static;
}
}
テーブルヘッダーセル:
public class TableHeaderCell : System.Web.UI.WebControls.TableHeaderCell
{
public TableHeaderCell()
{
}
public override void RenderBeginTag(HtmlTextWriter writer)
{
AddAttributesToRender(writer);
writer.AddAttribute("test", "whee");
writer.WriteBeginTag("th");
//writer.WriteAttribute("test", "whee");
writer.WriteLine('>');
}
public override void RenderEndTag(HtmlTextWriter writer)
{
writer.WriteEndTag("th");
writer.WriteLine();
}
}
利用方法:
<Internal:Table ID="somethingTbl" runat="server" Title="A Table" Sorted="true">
<Internal:TableHeaderRow>
<Internal:TableHeaderCell>
Stuff
</Internal:TableHeaderCell>
<Internal:TableHeaderCell>
More Stuff
</Internal:TableHeaderCell>
<Internal:TableHeaderCell>
Less Stuff
</Internal:TableHeaderCell>
</Internal:TableHeaderRow>
</Internal:Table>
そして、いくつかの通常の行がcsに追加されます。次の部分的な出力が得られます。
<table id="activationsTbl">
<thead>
<tr>
<th>
Stuff
</th>
<th>
More Stuff
</th>
<th>
Less Stuff
</th>
</tr>
</thead><tbody test="whee" test="whee" test="whee">
...
ご覧のとおり、属性は、すべてのthタグ(最後のtbodyタグ)の次の開始タグで書き出されています。コメントアウトされたWriteAttributesを使用すると、正しく書き込まれます。他の行がない場合(したがって、行がない場合<tbody>
)、属性は他のタグに書き込まれません。