从动态创建的复选框中获取错误的值

时间:2012-01-15 16:37:08

标签: c# asp.net .net dynamic-ui

我正在尝试从按钮单击上的动态创建的复选框中读取。问题是,选中该复选框后,在提交点击时无法正确读取进一步取消选中操作。

编辑:该复选框最初是通过调用SetSelection选择radiobuttonlist创建的,如图所示。

下面显示了代码段,不知道可能出现什么问题?

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();
}       

2 个答案:

答案 0 :(得分: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吗?

答案 1 :(得分:2)

看起来你宣布

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

如果是这样的话,每次调用该方法时都会重置为false。尝试宣布它的一面。 IE:

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

}