我正在使用自定义Web控件,其中Render方法被覆盖。
我的问题是,渲染控件的ID不包括控件所在的母版页和用户控件的ID。
这意味着如果我的渲染方法包含以下内容:
writer.AddAttribute(HtmlTextWriterAttribute.Id, ClientID);
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.RenderEndTag();
使用如下:
<somePrefix:MyWebControl ID="WebControl1" runat="server" />
然后控件将呈现为:
<div id="WebControl1"></div>
虽然我想要这样的东西:
<div id="ctl00_ctl00_ContentPlaceHolder1_ContentPlaceHolderMain_WebControl1"></div>
(如果我用ID WebControl1和runat =“server”建立一个div会产生什么)
我能做些什么来实现这个目标?
修改
发生这种情况时我错了。当我将控件直接放在页面中时,id很好(asp.net生成的id)。
但是,当MyControl从另一个Web控件呈现时会出现问题,该控件包含我的控件集合。
在容器控件中,RenderControl方法被覆盖如下:
foreach (Control control in MyControls)
{
divControls.Controls.Add(control);
}
divControls.RenderControl(writer)
答案 0 :(得分:2)
对HtmlTextWriterAttribute.Id使用UniqueID而不是ClientID。