資源描述:
《aspnet頁面中動態(tài)增加的控件、添加事件》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、ASP.NET頁面中動態(tài)增加的控件、添加事件/--------------------------利用計數(shù)器實現(xiàn)動態(tài)button的累加---------------------------------/在ASP.NET中動態(tài)創(chuàng)建一個控件總是不那么順利,特別是當(dāng)對頁面的LifeCycle不是那么了然的情況下!這里簡單描述一下要求,然后提供一個解決方案,大家看看有沒有更好的Idea,如果有的話就是我的大幸了,呵呵!要求:頁面上有一個Add按鈕,每點(diǎn)擊一次該按鈕,頁面上動態(tài)創(chuàng)建一個WebPartZone!
2、提醒:WebPartZone只能在OnInit或之前才能創(chuàng)建,否則報異常!大家都知道,按鈕的點(diǎn)擊事件是在RaisePostbackEvent時觸發(fā)的,這意味著點(diǎn)擊事件在OnLoad階段之后才執(zhí)行,遠(yuǎn)遠(yuǎn)落后于OnInit階段,而且ViewState在OnLoad時才準(zhǔn)備好,OnInit以及之前的階段根本就不能使用ViewState!如果試圖在按鈕點(diǎn)擊事件里面創(chuàng)建WebPartZone等控件,唯一的后果就是頁面出錯;而如果在OnInit里面創(chuàng)建控件,由于ViewState沒有準(zhǔn)備好,那么有些數(shù)據(jù)比如當(dāng)前
3、需要創(chuàng)建的個數(shù)(存在ViewState里面)就無法獲得!目前對這個問題我還沒有找到什么好的解決方案,經(jīng)過實驗,勉強(qiáng)得出一個不怎么優(yōu)雅的方案,就是利用HiddenField保存數(shù)據(jù),然后直接使用Request.Form["XXX"]在OnInit階段取得數(shù)據(jù);而判斷是否點(diǎn)擊按鈕也是通過Request.Form是否存在對應(yīng)數(shù)據(jù)來判斷的!廢話不多說了,大家看看代碼吧!privatevoidPage_Load(objectsender,System.EventArgse){ButtonButton1=new
4、Button();Button1.CommandArgument="b1";Button1.Text="Btn1";Button1.Command+=newCommandEventHandler(this.OnButton);PlaceHolder1.Controls.Add(Button1);ButtonButton2=newButton();Button2.CommandArgument="b2";Button2.Text="Btn2";Button2.Command+=newCommandEv
5、entHandler(this.OnButton);PlaceHolder1.Controls.Add(Button2);Controlc3=ParseControl("");//將字符串轉(zhuǎn)換成web控件Controlc4=ParseControl("6、ndname='Btn'commandargument='b4'runat='server'/>");PlaceHolder1.Controls.Add(c3);PlaceHolder1.Controls.Add(c4);ButtonmyBut=(Button)Page.FindControl("Button3");myBut.Command+=newCommandEventHandler(this.OnButton);ButtonmyBut2=(Button)Page.FindControl("B
7、utton4");myBut2.Command+=newCommandEventHandler(this.OnButton);}publicvoidOnButton(ObjectSender,CommandEventArgse){switch(e.CommandArgument.ToString().ToLower()){case"b1":Label1.Text="Button1";break;case"b2":Label1.Text="Button2";break;case"b3":Label1.
8、Text="Button3";break;case"b4":Label1.Text="Button4";break;};}privatevoidPage_Load(objectsender,System.EventArgse){ButtonButton1=newButton();Button1.CommandArgument="b1";Button1.Text="Btn1";Button1.Command+=newCommandEventHandler(this.On