2012-01-15 6 views
4

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

РЕДАКТИРОВАТЬ: флажок сначала создается при выборе радиокниги, вызывая SetSelection, как показано на рисунке.

Ниже приведен фрагмент кода, любая идея, что может быть возможной проблемой?

protected void Page_Load(object sender, EventArgs e) 
{  
    if (this.IsPostBack) 
    { 
    .. 
     GenerateDynamicUI(); 
    } 
    ... 
}  


private void GenerateDynamicUI(int selectedItem) 
{ 
    ... 
    TableCell cellCheckBox = new TableCell(); 
    CheckBox chkBox = new CheckBox();    
    chkBox.Text = "Consider all"; 
    chkBox.ID = "chkAll"; 
    cellCheckBox.Controls.Add(chkBox); 

    TableRow chkRow = new TableRow(); 
    chkRow.Cells.Add(cellCheckBox); 
    table.Rows.Add(chkRow); 
} 

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    ... 
    bool isChecked = ((CheckBox)table.FindControl("chkAll")).Checked; 

} 

private void SetSelection() 
{ 
    int selectedItem = int.Parse(radiobuttonList.SelectedItem.Value);   
    GenerateDynamicUI(selectedItem); 
    pnlDynamic.Visible = true;    
} 

protected void radiobuttonList_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    SetSelection(); 
}  
+0

Этот CheckBox уже присутствует в вашем коде веб-формы или он будет создан только в Postback? –

+0

Создано на обратной стороне. – devnull

+0

Он создается динамически, в его методе GenerateDynamicUI. – Brissles

ответ

2

это выглядит, как вы объявляя

bool isChecked = ((CheckBox)table.FindControl("chkAll")).Checked; 

в btnSubmit, если так будет сбросить ложь каждый раз, когда метод вызывается. попробуйте объявить его стороной. IE:

bool isChecked; 
protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    ... 
    isChecked = ((CheckBox)table.FindControl("chkAll")).Checked; 

} 
+0

Это не имеет значения, это локальный var. Кроме того, он записывается каждый раз. – Brissles

+0

ahh, ладно, неправильно читайте код, извините. – Dusty

4

Я воссоздал ваш пример, и он отлично работает. Я могу только представить, что в вашем коде есть что-то еще, что связано с неожиданным поведением.

Попробуйте использовать Page_PreInit событие, а не Page_Load заново создать/манипулировать динамические элементы управления:

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    // create controls here 
    GenerateDynamicUI(); 
} 

Подробнее: http://msdn.microsoft.com/en-us/library/ms178472.aspx

К «не готовы должным образом» Я предполагаю, что вы имеете в виду это остается True и никогда не возвращает False после того, как вы впервые его проверили?

+0

Да, он остается True и никогда не возвращает False после первого раза, когда я его проверю. – devnull

+0

+1 для создания динамических элементов управления в PreInit. Вот где они принадлежат –

Смежные вопросы