ScriptControl に基づいてコントロールを作成し、次のRender
ようにメソッドをオーバーライドしています。
protected override void Render(HtmlTextWriter writer)
{
RenderBeginTag(writer);
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.Write("This is a test.");
writer.RenderEndTag();
RenderEndTag(writer);
}
私の質問は、コントロールのインスタンスが複数ある場合でも、div に ID 属性を割り当ててページ上で一意にしたい場合はどうすればよいですか?
これを行う他の人のコードを見てきました:
writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID + "_divTest");
これにより、コントロールのインスタンス間の名前の競合を防ぐことができますが、偶然にも同じ ID を持つ div をページの別の場所に作成してしまった場合はどうなるでしょうか?
INamingContainer の実装についても聞いたことがあります。それはここに当てはまりますか?どのように使用できますか?
更新:
CreateChildControls
HTML を直接レンダリングするのではなく、実際のコントロールをオーバーライドして追加することで、この問題を回避しました。その場合、INamingContainer がその役割を果たします。ただし、元の問題 (直接レンダリングされた要素の一意の ID) を解決する方法があるかどうかはまだ興味があります。