2012-02-15 98 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