(論壇答疑點滴)用戶控件動態加載PostBack后的問題
2024-07-21 02:15:51
供稿:網友
 
很多網友在按鈕的click事件中動態添加用戶控件在頁面回傳后消失了或者就是用戶控件中的按鈕事件不能觸發,下面是解決辦法:
(1)
首先添加一個用戶控件:webusercontrol1.ascx
添加一個按鈕:public system.web.ui.webcontrols.button ucb;text為"用戶控件的按鈕"(等會要在page中用到這個按鈕,所以設置為public)
<asp:button id="ucb" text="用戶控件的按鈕" runat="server"></asp:button>
為按鈕的click事件添加代碼:
response.write(i.tostring());
i++;
在類中申明static int i=0;
這樣通過點擊按鈕可以看到點擊一次,計數增加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;
   }
  }
我們在視圖狀態中增加一個標志位,表示是否點擊了按鈕來加載用戶控件,當然如果已經加載了再點擊按鈕就不需要重復加載了。
關鍵的是需要在page.ispostback的時候也要加載用戶控件
(因為如果不這么做的話,回傳的時候用戶控件就消失了)
if(page.ispostback)
   {
    if(viewstate["adduc"]!=null)
    {
     adduc();
    }
   }
下面可以點擊button1試驗一下,是不是加載了用戶控件?同時再點擊用戶控件中的按鈕也能很好的觸發其事件。
再為button2添加click事件,用來讀取用戶控件中btn這個按鈕的標題,動態加載的用戶控件和設計時加載的用戶控件一樣也能很好的和頁面進行交互:
private void button2_click(object sender, system.eventargs e)
  {
   if(viewstate["adduc"]!=null)
   {
    response.write(((webusercontrol1)page.findcontrol("uc")).ucb.text);
   }   
  }
這里注意到在加載用戶控件的時候我們為之指定了id,能夠方便的通過findcontrol來找到