【问题标题】:How can I move an user control into a panel?如何将用户控件移动到面板中?
【发布时间】:2012-05-28 15:22:22
【问题描述】:

.aspx 我有这个:

<%@ Register src="box/MyBox.ascx" tagname="MyBox" tagprefix="uc2" %>
<uc2:MyBoxID="MyBox1" runat="server" />

<asp:Panel ID="panelLeft" runat="server">

</asp:Panel>

<asp:Panel ID="panelRight" runat="server">

</asp:Panel>    

我想在aspx.cs 上做这样的事情:

if (condition)
{
    panelLeft.Controls.Add(MyBox1);
}
else
{
    panelRight.Controls.Add(MyBox1);
}

但我好像做不到!为什么?我该怎么做?

【问题讨论】:

    标签: c# .net user-controls panel


    【解决方案1】:

    您必须使用 LoadControl 来创建控制服务器端。

    Control myBox1 = LoadControl("~/box/MyBox.ascx");
    if (condition) 
    { 
        panelLeft.Controls.Add(myBox1); 
    } 
    else 
    { 
        panelRight.Controls.Add(myBox1); 
    } 
    

    【讨论】:

    • 看起来正确!我唯一不明白的是,为什么如果在 aspx 之前执行 aspx.cs,控件会添加到面板的“末尾”...
    • 您可以使用 Controls.AddAt 来控制添加对象的位置,但是在运行 ascx.cs 之前解析标记,否则,无法正确应用视图状态以使您可以访问控制当前值。
    【解决方案2】:

    如果由于某种原因使用 LoadControl 添加控件不适合您要采用的方法,您可以通过将用户控件的两个副本添加到您想要的两个位置的标记中来实现类似的效果。然后,您可以在条件逻辑中切换代码中的可见性。

    例如,这样的 ASPX:

    <%@ Register src="box/MyBox.ascx" tagname="MyBox" tagprefix="uc2" %>
    
    
    <asp:Panel ID="panelLeft" runat="server">
        <uc2:MyBoxID="MyBox1" runat="server" />    
    </asp:Panel>
    
    <asp:Panel ID="panelRight" runat="server">
        <uc2:MyBoxID="MyBox2" runat="server" />        
    </asp:Panel>    
    

    然后在后面的代码中可以切换可见性:

    MyBox1.Visible = condition;
    MyBox2.Visible = !MyBox1.Visible;    
    

    但是,您随后将用户控件的两个不同副本加载到页面上,然后您的代码必须知道要访问哪个用户控件,而不是总是访问“MyBox1”。您可能需要在代码中隐藏一个属性来为您隐藏检查,例如:

    private MyBox MyBox{
       get { return condition ? MyBox1 : MyBox2; }
    }
    

    【讨论】:

      【解决方案3】:
      if (condition) 
      { 
         this.panelLeft.Controls.Add(mybox1);
      } 
      else 
      { 
          this.panelRight.Controls.Add(myBox1); 
      }
      

      【讨论】:

        猜你喜欢
        • 2012-08-25
        • 2010-10-11
        • 2012-04-03
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 2013-07-07
        • 2014-06-10
        相关资源
        最近更新 更多