#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 мог перезагрузить проверенное состояние.