2012-01-15 11 views
4

ボタンクリック時に動的に作成されたチェックボックスから読み込もうとしています。問題は、チェックボックスをオンにすると、サブミット時に未確認の操作が正しく読み取られないことです。動的に作成されたチェックボックスから間違った値を取得する

EDIT:このチェックボックスは、図のように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

このチェックボックスは、Webフォームコードに既に存在するのですか、それともポストバックで作成されますか? –

+0

ポストバック時に作成されます。 – devnull

+0

GenerateDynamicUIメソッドで動的に作成されます。 – Brissles

答えて

2

それはそう、それはfalseにメソッドが呼び出されるたびにリセットされます場合は、btnSubmitで

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

を宣言するように見えます。それを外に宣言してみてください。 IE:

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

} 
+0

これは問題ではありません、それはローカルvarです。さらにそれは毎回書かれています。 – Brissles

+0

ああ、申し訳ありませんが、コードを誤読、申し訳ありません。 – Dusty

4

私はあなたの例を作り直しても問題ありません。予期せぬ動作の原因となっているコードには、他にも何かがあります。

再作成/あなたの動的なコントロールを操作することではなくPage_LoadよりPage_PreInitイベントを使用してみてください:

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でダイナミックコントロールを構築します。それは彼らが所属する場所です –

関連する問題