Как найти флажок внутри Asp.net панель?

#c# #asp.net #.net

#c# #asp.net #.net

Вопрос:

Я не могу найти флажки внутри панели. Вот мой код. При загрузке страницы я добавляю динамические элементы управления. Он правильно загружает все элементы управления:

 if(!Page.IsPostBack){
foreach (var chk in chks)
{
   PlSettings.Controls.Add(new LiteralControl("<div class="Controls">"));

   PlSettings.Controls.Add(chk);

   PlSettings.Controls.Add(new LiteralControl("</div>"));
}
}
  

При обновлении кнопки я хотел бы перебрать все элементы управления внутри панели, и если тип флажка, проверьте, установлен ли он или нет.

 foreach (var panelctrl in PlSettings.Controls)
            {

                  if (panelctrl.GetType() == typeof(CheckBox))
                   {
                      var checkbox = (CheckBox)chk;

                      if (checkbox.Checked)
                       {
                                userSettings.Add(Convert.ToInt32(checkbox.ID));
                       }
                   }

            }
  

По какой-то причине Panel имеет только один буквальный элемент управления. и никакого контроля внутри.

Ответ №1:

Обновите foreach этим кодом:

 // if(!Page.IsPostBack){
foreach (var chk in chks)
{
   PlSettings.Controls.Add(new LiteralControl("<div class="Controls">"));

   PlSettings.Controls.Add(chk);

   PlSettings.Controls.Add(new LiteralControl("</div>"));
}
//}
  

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

Ответ №2:

Вместо этого попробуйте что-то вроде этого:

 foreach (CheckBox chk in PlSettings.Controls.OfType<CheckBox>())
{
    //code here
}
  

И поскольку эти элементы управления генерируются динамически, вам нужно будет воссоздавать элементы управления при каждой обратной передаче. Убедитесь, что вы назначаете один и тот же идентификатор элементам управления каждый раз, чтобы ViewState мог перезагрузить проверенное состояние.