3

動的に作成されるチェックボックスはほとんどなく、既存の選択が表示されますが、ユーザーが変更を加えたときにそれらを保存したいと思います。動的に生成および選択するコードは次のとおりです

private void Role(string role)
{
   SystemUserDal dal = new SystemUserDal();
   var userId = Guid.Parse(Request.QueryString["ID"].ToString());
   var roles = dal.GetRolesList(userId);
   foreach (KeyValuePair<Guid, string> r in roles)
   {
       CheckBox chk = new CheckBox();
       chk.ID = r.Value;
       chk.Text = r.Value;
       if (role.Contains(r.Value))
       {
          chk.Checked = true;
       } 
       rolepanel.Controls.Add(chk);
   }
}

私は次のことを試しています

private void GetCheckBoxes()
{
    foreach (Control ctrl in rolepanel.Controls)
    {
        CheckBox c = ctrl as CheckBox;
        string id = c.ID;
        string role = c.Text;
    }
}

コードをステップ実行すると、カウントが 3 の foreach ループにヒットしますが、ctl は null です。手がかりはありますか?

4

5 に答える 5

4

でコントロールが見つからなかったためrolepanel.FiondControl("chk")に返されたため、おそらくエラーが発生しています。メソッドは、探しているコントロールの ID である文字列を取ります。追加したチェックボックスには がありません。それらはすべてコードからのものです。後でチェックボックスを見つけるために使用できる ID のスキーマを考え出すことをお勧めします。nullID="chk"FindControlID="chk"ID=r.value

rolepanel動的に追加されたチェックボックスのみが含まれている場合rolepanel.Controlsは、それらをすべて取得するために使用できます。

コントロールを にキャストすることを忘れないでくださいCheckBox

したがって、次のGetCheckBoxes()ようになります。

private void GetCheckBoxes()
{
    foreach (Control ctrl in rolepanel.Controls)
    {
        if (ctrl is CheckBox)
        {
            CheckBox c = ctrl as CheckBox;
            string cText = c.Text;

            // do what you need to do with cText, or checkbox c
        }
    }
}
于 2013-04-18T18:09:47.097 に答える
2

キャストしてもエラーになりますか?

例えば

private void GetCheckBoxes()
{
    CheckBox chk = (CheckBox)rolepanel.FindControl("chk");
    if(chk!= null)

}
于 2013-04-18T18:05:34.097 に答える
0

コントロールを CheckBox にキャストする必要があります。

private void GetCheckBoxes()
{
    CheckBox chk = (CheckBox)rolepanel.FindControl("chk");
    if(chk!= null)
    ....

}
于 2013-04-18T18:07:02.050 に答える