ASP.net Web 窗体自定义控件自动更改下一个控件的 ID
ASP.net Web Forms Custom control automatically changes the ID of next control
我有两个自定义控件。我有一个继承 CompositeControl 的选择器和一个继承自 DropDownList 的下拉列表。下面是我的 aspx 页面的代码片段:
<table border="0" cellpadding="0" cellspacing="3" width="100%">
<tr>
<td class="a12bold" style="padding: 0px 0px 5px 0px;">contact:</td>
<td>
<div><cc:Selector id="SelectorID" runat="server" Width="300" /> </div>
</td>
</tr>
</table>
<table border="0" cellpadding="0" cellspacing="3" width="100%">
<tr>
<td class="a12bold" style="padding: 0px 0px 5px 0px;">Category:</td>
<td><cm:DropDown id="dropDownID" runat="server" Width="350px" AutoSelectSingleRow="true"></cm:DropDown></td>
</tr>
</table>
出于某种原因,在呈现我的选择器时,第二个自定义控件最终有两个 ID。下面是第二个控件的效果图:
<td><select id="SelectorID" name="dropDownID" id="dropDownID" style="width:350px;">
<option selected="selected" value=""></option>
我花了两天时间试图解决这个问题。到目前为止我所做的事情:
- 调试我的选择器的 RenderContents() 覆盖
- 正在为我的下拉菜单调试 RenderContent() 覆盖。
- 正在检查 HTML 语法错误。 (开始标签,结束标签)
在服务器端似乎一切正常,直到渲染,它为我的第二个控件放置了两个 ID。我怎样才能找到原因?
我终于找到解决办法了!问题是我之前在我的 RenderContents():
中使用了 AddAttributesToRender()
protected override void RenderContents(HtmlTextWriter output)
{
EnsureChildControls();
AddAttributesToRender();
string htmlOutput = getHtmlOutput();
output.Write(htmlOutput);
}
删除 AddAttributesToRender() 后,重复 ID 问题就消失了。
我有两个自定义控件。我有一个继承 CompositeControl 的选择器和一个继承自 DropDownList 的下拉列表。下面是我的 aspx 页面的代码片段:
<table border="0" cellpadding="0" cellspacing="3" width="100%">
<tr>
<td class="a12bold" style="padding: 0px 0px 5px 0px;">contact:</td>
<td>
<div><cc:Selector id="SelectorID" runat="server" Width="300" /> </div>
</td>
</tr>
</table>
<table border="0" cellpadding="0" cellspacing="3" width="100%">
<tr>
<td class="a12bold" style="padding: 0px 0px 5px 0px;">Category:</td>
<td><cm:DropDown id="dropDownID" runat="server" Width="350px" AutoSelectSingleRow="true"></cm:DropDown></td>
</tr>
</table>
出于某种原因,在呈现我的选择器时,第二个自定义控件最终有两个 ID。下面是第二个控件的效果图:
<td><select id="SelectorID" name="dropDownID" id="dropDownID" style="width:350px;">
<option selected="selected" value=""></option>
我花了两天时间试图解决这个问题。到目前为止我所做的事情:
- 调试我的选择器的 RenderContents() 覆盖
- 正在为我的下拉菜单调试 RenderContent() 覆盖。
- 正在检查 HTML 语法错误。 (开始标签,结束标签)
在服务器端似乎一切正常,直到渲染,它为我的第二个控件放置了两个 ID。我怎样才能找到原因?
我终于找到解决办法了!问题是我之前在我的 RenderContents():
中使用了 AddAttributesToRender() protected override void RenderContents(HtmlTextWriter output)
{
EnsureChildControls();
AddAttributesToRender();
string htmlOutput = getHtmlOutput();
output.Write(htmlOutput);
}
删除 AddAttributesToRender() 后,重复 ID 问题就消失了。