Флажок, добавленный программно, не найден

#c# #asp.net

#c# #asp.net

Вопрос:

Я добавляю флажки таким образом:

 protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        CheckBox FieldCh = new CheckBox();
        FieldCh.ID = "Field_"   Field.Id;
        Panel1.Controls.Add(FieldCh);
    }
}
 

но когда я пытаюсь получить эти флажки из формы:

 foreach (Control item in FindControl("FieldForm").Controls)
  {
   if (item is Panel)
    {
      foreach (Control checkbox in item.Controls)
 

я не могу найти эти флажки:/ Это может быть проблемой с runat=server? Я не нахожу это свойство в флажке..

Комментарии:

1. Из какой функции вы добавляете элементы управления?

2. Когда вы пытаетесь установить эти флажки? После обратной отправки? В какой функции / обработчике событий?

Ответ №1:

Если вы хотите найти этот флажок после обратной передачи (что я и предполагал), вам нужно создать его заново. Попробуйте создать этот флажок из if(!PostBack) предложения (чтобы он также воссоздавался после обратной передачи):

 protected void Page_Load(object sender, EventArgs e)
{
    CheckBox FieldCh = new CheckBox();
    FieldCh.ID = "Field_"   Field.Id;
    Panel1.Controls.Add(FieldCh);
    if (!IsPostBack)
    {
         // ....        
    }
}
 

Комментарии:

1. Это правильный ответ. HTTP не имеет состояния, поэтому, если вы не создадите элемент управления заново при каждой обратной передаче или не сохраните его в ViewState, вы не сможете получить доступ к элементу управления после начальной загрузки страницы, потому что он не существует!

Ответ №2:

Вы должны использовать Page_Load even для динамического добавления элементов управления.

 protected void page_load()
{
CheckBox FieldCh = new CheckBox();
FieldCh.ID = "Field_"   Field.Id;
Panel1.Controls.Add(FieldCh);
}
 

Ответ №3:

вы можете просто использовать лучший метод поиска вашего элемента управления

просто используйте это

 CheckBox chkBox = this.form1.FindControl("YourControlId") as CheckBox;