title: When $ sign is in the Id of the ASP TextBox, FindControl method returns null
body: <p>I am writing to you because I want to understand what is happening.</p>
  
  <p>In my code, I add controls dynamically to the <code>System.Web.UI.WebControls.GridView</code> (I extended it). After some action on the page, I am checking if the ID of the Control from <code>Page.Request["__EVENTTARGET"]</code> is the one, which I saved earlier in ViewState.</p>
  
  <p>On .Net 3.5 everything works fine, but after switching my project to .Net 4 this doesn't work, because <code>Page.Request["__EVENTTARGET"]</code> returns Inherit ClientId, and I keeped in ViewState only short Id of my control. I fixed it by using <code>Page.FindControl</code> method. It works for LinkButtons, Buttons and DropDowns, but not for TextBoxes, because <code>Page.Request["__EVENTTARGET"]</code> returns name of my TextBox...</p>
  
  <p>So I change ClientIdMode for my TextBox to Static, like <code>'string$string'</code>. But still <code>Page.FindControl</code> was returned null. I have read that if TextBox is generated dynamically and it is nested in some controls, this method is not able to find it.</p>
  
  <p>My <strong>first</strong> question. Why method <code>Page.FindControl</code> is not able to find nested TextBox, but it can handle with others control like DropDown or LinkButton?</p>
  
  <p>But I handle this problem also. I wrote recursive kind of <code>Page.FindControl</code> and I can find my TextBox. But in this moment I came across a problem again. Value of this TextBox is old (I write 6, but in the Text property there is still 1). My first idea was that this is because I was doing it too early - in <code>OnPagePreLoad</code> method.</p>
  
  <p>But then I change Id of my TextBox from <code>string$string</code> to 'string_string' and it started to work fine (value of my text box is that I wrote).</p>
  
  <p>And this is my <strong>second</strong> question. Why dollar ($) sign cause I saw the old value?</p>
  
  <p>Thanks !!</p>