Search code examples
c#asp.netmaster-pagescontentplaceholder

FindControl returns null


I am working on a solution in C# and ASP.NET 4.0 I am trying to get the value of a radiobutton from my page that was dynamically created based on some database information.

Here is what gets generated in the page source:

<td>
  <input id="masterMain_3Answer_0" type="radio" name="ctl00$masterMain$3Answer"     
    value="Y" onclick="return answeredyes(3);" />
  <label for="masterMain_3Answer_0">Y</label>
</td>
<td>
  <input id="masterMain_3Answer_1" type="radio" name="ctl00$masterMain$3Answer" 
    value="N" onclick="return answeredno(3,&#39;desc&#39;);" />
  <label for="masterMain_3Answer_1">N</label>
</td>

Inside the OnClick function of my submit button I want to gather wether Y or N has been selected based on the user's input.

Here is what I have written so far:

      RadioButton _rbAnswer = new RadioButton();
      RadioButtonList _rbList = new RadioButtonList();


     ContentPlaceHolder cp = (ContentPlaceHolder)Master.FindControl("masterMain");
     _rbAnswer = (RadioButton)Master.FindControl("masterMain_3Answer_0");
     HtmlInputRadioButton rb = (HtmlInputRadioButton)Master.FindControl("masterMain_3Answer_0");


     _rbAnswer = (RadioButton)cp.FindControl("masterMain_3Answer_0");
     _rbList = (RadioButtonList)cp.FindControl("masterMain_3Answer_0");

I am able to get the ContentPlaceHolder without any issues but the rest of the objects are null after it attempts to get the . I have also attempted removing the "masterMain_" but still doesn't want to find the controls.

Here is the code in which the individual radiobuttonlists are added

                TableRow _tempRow = new TableRow();
                TableCell _cellOK = new TableCell();


                 RadioButtonList _rbList = new RadioButtonList();
                _rbList.ID = r[0].ToString()+"Answer";
                _rbList.RepeatDirection = RepeatDirection.Horizontal;

                //add options for yes or no
                 ListItem _liOk = new ListItem();
                _liOk.Value = "Y";
                 ListItem _linotOk = new ListItem();
                _linotOk.Value = "N";
                _rbList.Items.Add(_linotOk);

                //add cell to row
                _rbList.Items.Add(_liOk);
                _cellOK.Controls.Add(_rbList);
                _tempRow.Cells.Add(_cellOK);

                 //add the row to the table
                 stdtable.Rows.Add(_tempRow);

Solution

  • To be able to quickly find dynamically created controls, add a dictionary to your page class:

    private Dictionary<string, Control> fDynamicControls = new Dictionary<string, Control>();
    

    then when a new control is created in code and its ID is assigned:

    fDynamicControls.Add(newControl.ID, newControl);
    

    and when you need control's reference:

    Control c = fDynamicControls["controlIdThatYouKnow"];