#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;