|
很多網(wǎng)友在按鈕的click事件中動態(tài)添加用戶控件在頁面回傳后消失了或者就是用戶控件中的按鈕事件不能觸發(fā),下面是解決辦法: (1) 首先添加一個用戶控件:webusercontrol1.ascx 添加一個按鈕:public system.web.ui.webcontrols.button ucb;text為"用戶控件的按鈕"(等會要在page中用到這個按鈕,所以設(shè)置為public) <asp:button id="ucb" text="用戶控件的按鈕" runat="server"></asp:button> 為按鈕的click事件添加代碼: response.write(i.tostring()); i++; 在類中申明static int i=0; 這樣通過點擊按鈕可以看到點擊一次,計數(shù)增加1 (2) 添加一個頁面 放置一個placeholder,兩個按鈕 <asp:placeholder id="placeholder1" runat="server"></asp:placeholder> <asp:button id="button1" runat="server" text="加載用戶控件"></asp:button> <asp:button id="button2" runat="server" text="獲取用戶控件中的值"></asp:button> 添加一個加載用戶控件的操作: private void adduc() { webusercontrol1 uc=(webusercontrol1)page.loadcontrol("webusercontrol1.ascx"); uc.id="uc"; this.placeholder1.controls.add(uc); } 為第一個按鈕增加click事件: private void button1_click(object sender, system.eventargs e) { if(viewstate["adduc"]==null) { adduc(); viewstate["adduc"]=1; } } 我們在視圖狀態(tài)中增加一個標(biāo)志位,表示是否點擊了按鈕來加載用戶控件,當(dāng)然如果已經(jīng)加載了再點擊按鈕就不需要重復(fù)加載了。 關(guān)鍵的是需要在page.ispostback的時候也要加載用戶控件 (因為如果不這么做的話,回傳的時候用戶控件就消失了) if(page.ispostback) { if(viewstate["adduc"]!=null) { adduc(); } } 下面可以點擊button1試驗一下,是不是加載了用戶控件?同時再點擊用戶控件中的按鈕也能很好的觸發(fā)其事件。 再為button2添加click事件,用來讀取用戶控件中btn這個按鈕的標(biāo)題,動態(tài)加載的用戶控件和設(shè)計時加載的用戶控件一樣也能很好的和頁面進(jìn)行交互: private void button2_click(object sender, system.eventargs e) { if(viewstate["adduc"]!=null) { response.write(((webusercontrol1)page.findcontrol("uc")).ucb.text); } } 這里注意到在加載用戶控件的時候我們?yōu)橹付薸d,能夠方便的通過findcontrol來找到 文章整理:西部數(shù)碼 |
|
|