我創建基於ScriptControl的控制,而我重寫Render
方法是這樣的:確保爲元素的唯一ID屬性中ScriptControl的
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");
這將阻止我控制的實例之間的命名衝突,但如果我已經是巧合有在頁面上創建一個div別處相同的ID?
我也聽說過實施INamingContainer。這適用於這裏嗎?我怎麼用它?
UPDATE:
我解決此通過重寫CreateChildControls
和增加實際控制,而不是直接渲染HTML工作。在那種情況下,INamingContainer會完成它的工作。不過,我仍然好奇是否有辦法解決我原來的問題(直接渲染元素的唯一ID)。
我實現了INamingContainer並嘗試添加一個ID屬性: writer.AddAttribute(HtmlTextWriterAttribute.Id,「divTest」); 但是當我實例化我的兩個控件時,div在兩個中都有相同的ID。也許這是因爲div不是兒童控制。 MSDN說:「所有的孩子控制ID屬性保證是唯一的。」 – 2010-04-28 05:42:16
你是如何實例化的?如果我在同一個頁面上有兩個文本框,並且具有相同的ID,那將是一個命名衝突。如果我在ID爲TextBox1的頁面上有一個texbox,而在嵌套的用戶控件(WebUserControl1)中有一個id爲TextBox1,則生成的id保證是唯一的 - TextBox1和WebUserControl1_TextBox1 – 2010-04-28 12:23:41
我將兩個帶有不同ID的ScriptControl添加到頁面使用設計器(拖放)。每個渲染的div都帶有相同的ID。問題是我沒有向用戶控件添加子控件;我使用TextWriter手動渲染服務器控件中的div。 – 2010-04-28 14:06:50