zoukankan      html  css  js  c++  java
  • Asp.net web form 动态生成控件的注意事项

    Asp.net web form 动态生成控件的注意事项

    Asp.net页面生命周期

    页面初始化          Page_Init  
    加载View State      LoadViewState   
    回发数据处理      LoadPostData   
    页面加载          Page_Load   
    回发通知          RaisePostDataChangedEvent  
    回发事件处理     RaisePostBackEvent  
    页面预渲染       Page_PreRender   
    保存             viewstate SaveViewState   
    Page渲染         Page_Render   
    Page 卸载       Page_UnLoad  

    今天测试了一个bug,动态生成控件,但是状态会乱掉的一个问题.
    页面如下:
    一个checkboxlist,一个button.
    根据你选择的checkboxlist 值,点击button会根据这个值生成相应数据的控件(

    一个htmltablerow,两个htmltablecell,各加一个textbox和一个checkboxlist.

    问题是如果先点了3,并且修改了生成checkboxlist的状态,
    第二次再点击2,则动态生成的checkboxlist的状态会乱掉.

       

    protected void Page_Load(object sender, EventArgs e){
    	if (!IsPostBack){ 
    	}else{
    		foreach (ListItem item in CheckBoxList1.Items){
    			if(item.Selected)
    			AddControl(item.Value);
    		}
    	}
    }
    
    public void AddControl(string count){
    	int cnt = 0;
    	int.TryParse(count, out cnt);
    	for (int i=0;i<cnt;i++){  
    		HtmlTableRow tr = new HtmlTableRow();
    		HtmlTableCell tc = new HtmlTableCell();
    		tc.Controls.Add(new TextBox());
    		HtmlTableCell tc2 = new HtmlTableCell();
    		Panel pn = new Panel();
    		//pn.ID = "panel" + cnt.ToString() + "_" + i.ToString();
    		CheckBoxList cb = new CheckBoxList();
    
    		//cb.ID = "checklist"+cnt.ToString()+"_"+i.ToString();
    		cb.Items.Add(new ListItem("test1", "test1"));
    		cb.Items.Add(new ListItem("test2", "test2"));
    		cb.Items.Add(new ListItem("test3", "test3"));
    		pn.Controls.Add(cb);
    		tc2.Controls.Add(pn);
    		tr.Cells.Add(tc);
    		tr.Cells.Add(tc2);
    		filter2.Rows.Add(tr);
    	}
    }

    原因:viewstate保存控件的状态,但是它需要控件的uniqueID,我最初没有在动态生成的checkboxlist上指定一个ID,所以viewstate无法根据ID进行判断控件的状态.

    解决方案:给动态 生成的控件加上ID即可.

    注意事项:要在page_load里面把创建控件的方法执行.

    Looking for a job working at Home about MSBI

  • 相关阅读:
    bzoj 1121: [POI2008]激光发射器SZK 思维_结论
    bzoj 1189: [HNOI2007]紧急疏散evacuate 分层图最大流 + 拆点 + 二分
    luogu 3467 [POI2008]PLA-Postering 单调栈
    BZOJ1143: [CTSC2008]祭祀river 网络流_Floyd_最大独立集
    BZOJ 1123: [POI2008]BLO 求割点+乘法原理+计数
    bzoj 1191: [HNOI2006]超级英雄Hero 网络流 + 残量网络
    无题
    numpy模块(对矩阵的处理,ndarray对象)
    python面向过程编程
    logging模块,程序日志模板
  • 原文地址:https://www.cnblogs.com/grj001/p/12223925.html
Copyright © 2011-2022 走看看