问题描述
现在有一用户控件里面显示的是产品列表,里面含有一个分页控件,,product.aspx来动态调用的时候,可以显示产品列表出来,protectedvoidButton2_Click(objectsender,EventArgse){Control_Productcon=(Control_Product)Page.LoadControl("../Control/Product.ascx");con.show();//这个是绑定DataListpl.Controls.Add(con);}出问题的地方是,当点击用户控件中的分页控件的时候这个用户控件就消失掉了,点击别的按钮,用户控件也会卸载掉
解决方案
解决方案二:
点按钮时..页面会先Page_load
解决方案三:
设个断点试一下就知道了.
解决方案四:
动态加载控件需要在protectedvoidPage_Init(){//LoadloginmoduleloginUserControl=this.LoadControl(loginPage)asUserControl;this.LoginPlaceHolder.Controls.Add(loginUserControl);}或者page_load(){}每次都需要加载,并不想平时理解的加载一次,控件就一直会加载。用户控件加载分为动态和静态两种动态加载就是向你用代码加载某个路径下额用户控件。静态加载就是直接把用户控件拖拽到需要的页面。你这个问题倒是可以用viewstate或者session记录加载过的用户控件,然后每次在page_init()或者page_load事件当中重新加载,但是实际意义不大,不可能你的整个项目都这样去做,当然你要是想实现动态加载可以在后台把相应的用户控件和页面记录。每次执行page_init事件就循环数据库进行加载。
解决方案五:
分页控件还是做成自定义控件好点.也就是上面说的静态加载方式.
解决方案六:
页面逻辑应该这样:protectedvoidButton2_Click(objectsender,EventArgse){ShowProduct=true;}privateboolRefreshFlag=true;privateboolShowProduct{get{if(ViewState["product"]==null)returnfalse;elsereturn(bool)ViewState["product"];}set{ViewState["product"]=value;RefreshFlag=true}}privatevoidLoadControls(boolwriteDatas){PlaceHolder1.Controls.Clear();if(ShowProduct){Control_Productcon=(Control_Product)Page.LoadControl("../Control/Product.ascx");con.ID="Product";pl.Controls.Add(con);con.show();//绑定DataList。如果writeDatas==false,那么并不需要填后台数据,仅需要创建子控件。}RefreshFlag=false;}protectedvoidPage_Load(objectsender,EventArgse){LoadControls(false);}protectedvoidPage_PreRender(objectsender,EventArgse){if(RefreshFlag)LoadControls(true);}
解决方案七:
PlaceHolder1.Controls.Clear();改为:pl.Controls.Clear();这行非常必要。
解决方案八:
你只要记住一点首先“asp.net页面的动态子控件是需要创建两遍的”,这才开始去了解动态页面编程的机理。从asp.net页面“生命周期”模型开始学习asp.net!第一遍调用LoadControls的目的是让asp.net通过LoadPostData来“回填postdata”以及“准备触发xxxChanged事件。”
解决方案九:
学习...
解决方案十:
不错,学习中。