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

2 に答える 2

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思いますか?

于 2012-01-15T17:20:04.003 に答える
2

宣言しているようです

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

その場合、メソッドが呼び出されるたびに false にリセットされます。外側に宣言してみてください。いいえ:

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

}
于 2012-01-15T17:00:13.087 に答える