2016-04-25 47 views
0

我有两个自定义控件。我有一个Selector,它继承了CompositeControl,还有一个从DropDownList继承的下拉列表。下面是我的aspx页面的代码片段:ASP.net Web窗体自定义控件自动更改下一个控件的ID

<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语法错误。 (打开标签,关闭标签)

一切似乎都在服务器端工作正常,直到渲染,这使两个ID为我的第二控制。我怎样才能找到原因是什么?

+0

请为您的选择器控件提供代码 – techspider

+0

@techspider延迟的道歉。我终于找到了解决方案。我发布了下面的代码。 –

回答

0

我终于找到了解决办法!问题是,我以前使用的AddAttributesToRender()我RenderContents()内:

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

     string htmlOutput = getHtmlOutput(); 

     output.Write(htmlOutput); 
    } 

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