2012-02-15 76 views
0

有在我的aspx頁面的表格只有一個行2列,如:加載用戶控件單擊

<table runat="server" id="MainTable"> 
<tr> 
<td> 

<asp:Button runat="server" Text="Button 1" ID="btn1" OnClick="btn1_Click" /> 
<asp:Button runat="server" Text="Button 2" ID="btn2" OnClick="btn2_Click" /> 
<asp:Button runat="server" Text="Button 3" ID="btn3" OnClick="btn3_Click" /> 

</td> 

<td> 
<%-- place the user control here --> 
</td> 

</tr> 

</table> 

是有可能在點擊加載在第二單元的用戶控件每個按鈕的?

例如,如果我單擊Button1,必須在第二個單元格中加載UserControl1。 如果我點擊Button2,userControl1必須被取消充電,並且必須加載userControl2,依此類推。

在此先感謝。

路易吉

回答

0

你不應該動態地在這種情況下,加載用戶控件。當然,更好的做法是切換所有控件的Visibility。因此,將三個UserControls靜態添加到表格單元格中,並使其初始化爲Visible="false"。然後在每個按鈕的單擊事件中相應地更改這些屬性。

+0

我會嘗試這個添 – Ciupaz 2012-02-15 19:39:11

0

添加一個用戶控件的頁面是非常簡單的,你加載它像任何其他控件的頁面:

MyUserControl myControl = (MyUserControl) Page.LoadControl("MyUserControl.ascx"); 

Page.Controls.Add(myControl); 
+0

何時何地要那樣(最晚),它只能被添加一次或在每次回發,怎麼辦你知道它已經被添加了,....?只要這些問題都不會得到解答,這個問題就不會有幫助。除此之外,操作系統要求將其添加到表格單元中,而不是添加到頁面中。 – 2012-02-15 19:36:12

0

我真的很感激的想法加載它的飛行。

但是,只有在需要的時候才能加載它,並且在完成後或者在第二次點擊按鈕時進行處理,將其丟棄並刪除控件,然後再次加載它,否則它將始終保留在RAM中。 ...並會導致內存泄露..

樣本HTML

<asp:Table runat="server" ID="MainTable"> 
    <asp:TableRow> 
     <asp:TableCell ID="cell1" runat="server"> 
      <asp:Button runat="server" Text="Button 1" ID="btn1" OnClick="btn1_Click" /> 
      <asp:Button runat="server" Text="Button 2" ID="btn2" OnClick="btn2_Click" /> 
      <asp:Button runat="server" Text="Button 3" ID="btn3" OnClick="btn3_Click" /> 
     </asp:TableCell> 
     <asp:TableCell ID="cell2" runat="server"> 
     </asp:TableCell> 
    </asp:TableRow> 
</asp:Table> 

在按鈕單擊

cell2.Controls.Add(Your User Control ID); 

編輯 - 1

cell2.Controls.Clear(); 
cell2.Controls.Add(Your User Control ID); 
+0

頁面的所有對象都被放置在頁面生命週期的末尾,所以沒有內存泄漏。動態創建控件沒有任何好處,它使生活變得更加困難。在這種情況下,這是錯誤的方法,因爲用戶無法將控件添加到頁面。他只能使它們可見。 http://stackoverflow.com/questions/5046101/dynamically-created-controls-are-wiped-out-on-button-click/5046162#5046162 – 2012-02-15 19:47:40

+0

是的,你是對的@Tim,但控制內存將活着(從頁面加載開始就開始)以及在你的情況下,直到用戶不導航到另一個頁面。所以更好地按需加載...並在第二個或另一個按鈕上單擊並將其刪除,然後再次加載它... – Pankaj 2012-02-15 19:51:20

+0

不,所有**屬於頁面的對象(成員變量,控件等)都被丟棄在**這個**頁面的生命週期結束時。所以當用戶看到渲染的頁面時,它就不再存在於服務器的內存中。這就是爲什麼**每個**控件(即使是aspx標記的靜態控件,但是會自動發生)必須在回發時重新創建的原因。HTTP是無狀態的! – 2012-02-15 19:58:14