none
生成checkbox有问题 RRS feed

  • 问题

  • 权限表
    ModuleID PermissionID
    1                1
    1                2
    1                3

    repeater控件里绑定各个模块,然后在ItemDataBound的时候根据权限表读出模块的各个权限生成checkbox
    protected void rptResult_ItemDataBound(object sender, RepeaterItemEventArgs e)
      {
           if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
              {
                  PlaceHolder placeholder1 = (PlaceHolder)e.Item.FindControl("PlaceHolder1");
                  HiddenField hidModuleID = (HiddenField)e.Item.FindControl("hidModuleID");
                  List<SystemPermissionEntity> entitylist = new List<SystemPermissionEntity>();
                  entitylist = permissionclass.GetEntityList("ModuleID="+long.Parse(hidModuleID.Value.ToString())+"");
                  foreach (SystemPermissionEntity entity in entitylist)
                  {
                       CheckBox chkbox = new CheckBox();
                       chkbox.Text = entity.PermissionDescription.ToString();
                       chkbox.ID = "chk"+entity.PermissionID.ToString();
                       placeholder1.Controls.Add(chkbox);
                  }
              }
      }

    然后在btnAdd_Click的时候,判断checkbox是否选中,增加相应的权限
    protected void btnAdd_Click(object sender, EventArgs e)
      {
            List<SystemRolePermissionEntity> entitylist = new List<SystemRolePermissionEntity>();
            SystemRolePermissionEntity entity;
            foreach (RepeaterItem item in this.rptResult.Items)
            {
               if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
                 {
                    HiddenField hidModuleID = (HiddenField)item.FindControl("hidModuleID");
                    PlaceHolder placeholder1 = (PlaceHolder)item.FindControl("PlaceHolder1");
                    List<SystemPermissionEntity> pentitylist = new List<SystemPermissionEntity>();
                    pentitylist = permissionclass.GetEntityList("ModuleID="+long.Parse(hidModuleID.Value.ToString())+"");
                    foreach (SystemPermissionEntity pentity in pentitylist)
                    {
                       CheckBox chkbox = (CheckBox)placeholder1.FindControl("chk"+pentity.PermissionID.ToString());
                       entity = new SystemRolePermissionEntity();
                       if (chkbox.Checked == true)
                       {
                          entity.RoleID = RoleID;
                          entity.PermissionID = pentity.PermissionID;
                          entitylist.Add(entity);
                       }
                    }
                }
            }
      }

    但是绑定的时候控件能显示,但是选择完了提交的时候一直接收不到值,PlaceHolder1一直为null,怎么解决啊?
    • 已移动 Cookie Luo 2011年7月18日 8:01 (发件人:Visual C#)
    2011年7月15日 2:31

答案

  • 由於動態產生的Controls必須每次PostBack都重新再產生一次才可以取的到值,你可以把ItemDataBound事件中用來建立CheckBox的程式碼改寫成Function後,在Page_Load重新執行一次即可。
    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年7月19日 1:39

全部回复

  • 楼主好:)

    你的意思是在“btnAdd_Click”代码中PlaceHolder1始终找不到?还是选择提交以后“rptResult_ItemDataBound”代码中找不到PlaceHolder1?请具体说清楚——哪儿发生了异常?


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年7月15日 8:09
  • 移到asp.net 论坛


    Cookie Luo[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年7月18日 8:01
  • 由於動態產生的Controls必須每次PostBack都重新再產生一次才可以取的到值,你可以把ItemDataBound事件中用來建立CheckBox的程式碼改寫成Function後,在Page_Load重新執行一次即可。
    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年7月19日 1:39
  • 由於動態產生的Controls必須每次PostBack都重新再產生一次才可以取的到值,你可以把ItemDataBound事件中用來建立CheckBox的程式碼改寫成Function後,在Page_Load重新執行一次即可。
    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    當母佃汁去2豈署守抽炭庠牟31炭收留留留畈舛千圖油岐穿決耳易刺永刃叨
    2011年7月19日 2:18