回发后不显示用户控件

时间:2013-05-17 09:46:14

标签: c# asp.net user-controls

我有一个home.aspx页面,我有两个面板。在第一个面板中,我动态绑定了一个用户控件(用于在左侧显示meiny),在第二个面板中我显示了页面。 我在页面加载时动态绑定用户控件,如。

if (!IsPostBack)
    {
        UserControl uc = (UserControl)Page.LoadControl("~/settings/Links/Navigation.ascx");
        Accordion1.Controls.Add(uc);          

    }

当第一次加载页面时,我的usercontrol是绑定并显示我的菜单,但当我点击它隐藏的任何菜单项(用户控件)时,

请提前帮助我!

4 个答案:

答案 0 :(得分:5)

将此行代码放在Page生命周期的Page_Init事件中。

UserControl uc = (UserControl)Page.LoadControl("~/settings/Links/Navigation.ascx");
Accordion1.Controls.Add(uc);    

正确的方法:

protected void Page_Init(object sender, EventArgs e)
{

      //MyControl is the Custom User Control with a code behind file
      MyControl myControl = (MyControl)Page.LoadControl("~/MyControl.ascx");

      //UserControlHolder is a place holder on the aspx page where I want to load the
      //user control to.
      UserControlHolder.Controls.Add(myControl);

}

如果您使用if (!IsPostBack),则在回发后它将不会添加到页面中。第一次,您将能够在页面上看到控件。

参考:
ASP.NET Custom user control to add dynamically
How to: Create Instances of ASP.NET User Controls Programmatically

答案 1 :(得分:0)

这是一个动态控件,必须在每次回发时重新创建并重新读取到页面。

所以这会奏效:

//if (!IsPostBack)
//{
    UserControl uc = (UserControl)Page.LoadControl("~/settings/Links/Navigation.ascx");
    Accordion1.Controls.Add(uc);          
//}

答案 2 :(得分:0)

对于动态控制,不需要页面的!IsPostBack属性,删除此属性并使用

UserControl uc = (UserControl)Page.LoadControl("~/settings/Links/Navigation.ascx");
Accordion1.Controls.Add(uc);

答案 3 :(得分:0)

每次回发都必须加载它。保持用户控制加载代码if(!IsPostBack){}。