title: How can one modify the ClientId of a CompositeControl, eliminate rendering of said ID, without impacting ChildControls?
body: <p>I have a composite control that renders:</p>
  
  <pre><code>&lt;span id="controlID"&gt;
     &lt;span id="controID_propertyID"&gt;
     &lt;input id="controID_inputID"&gt;
  </code></pre>
  
  <p>The issue I'm having is when I try to reference the AssociatedControlID so as to bind a label to the input, I wind up with a:</p>
  
  <pre><code> &lt;label for="controlID"&gt;
  </code></pre>
  
  <p>Where I want:</p>
  
  <pre><code> &lt;label for="controlID_inputID"&gt;
  </code></pre>
  
  <p>I've tried:</p>
  
  <pre><code>    public override string ClientID
      {
          get
          {
              return _input.ClientID;
          }
      }
  </code></pre>
  
  <p>But then the span and input have the same id.</p>
  
  <pre><code>&lt;span id="controID_inputID"&gt;
     &lt;span id="controID_propertyID"&gt;
     &lt;input id="controID_inputID"&gt;
  </code></pre>
  
  <p>Then I tried:</p>
  
  <pre><code>    public override void RenderBeginTag(HtmlTextWriter writer)
      {
          writer.RenderBeginTag(HtmlTextWriterTag.Span);
      }
  
      public override void RenderEndTag(HtmlTextWriter writer)
      {
          writer.RenderEndTag();
      }
  </code></pre>
  
  <p>But this kills the uniqueness of the Property Span as well, which I want.</p>
  
  <pre><code>&lt;span&gt;
     &lt;span id="propertyID"&gt;   // I still want:  &lt;span id="controlID_propertyID"&gt;
     &lt;input id="controID_inputID"&gt;
  </code></pre>
  
  <p>Is there a way I can achieve what I want without having to switch the CompositeControl to be a WebControl. I would also like to avoid injecting codeblocks like:</p>
  
  <pre><code> &lt;label for="&lt;%=control.ClientID%&gt;_input"&gt;
  </code></pre>
  
  <p>Or any similar work-arounds via code-behind, literals, or whatnot.</p>