ASP.net Web窗体自定义控件自动更改下一个控件的ID

时间:2016-04-25 17:08:18

标签: asp.net custom-controls

我有两个自定义控件。我有一个Selector,它继承了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>

我花了两天时间试图解决这个问题。到目前为止我所做的事情:

  1. 调试我的选择器的RenderContents()重写
  2. 调试我的下拉列表的RenderContent()覆盖。
  3. 检查HTML语法错误。 (打开标签,关闭标签)
  4. 在服务器端,一切似乎都运行良好,直到渲染,为我的第二个控件放置两个ID。我怎样才能找到原因?

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案!问题是我以前在我的RenderContents()中使用了AddAttributesToRender():

    protected override void RenderContents(HtmlTextWriter output)
    {
        EnsureChildControls();
        AddAttributesToRender();

        string htmlOutput = getHtmlOutput();

        output.Write(htmlOutput);
    }

删除AddAttributesToRender()后,重复的ID问题就消失了。