我想在AJAX标签容器中使用标签的延迟加载。我已经实现了。但是我面临的问题是,当我单击按钮或触发该用户控件中的任何事件时,不会触发该事件。没发生什么事。
<asp:TabContainer runat="server" ID="TabContainerUp" ActiveTabIndex="0" AutoPostBack="true" OnActiveTabChanged="TabContainerUp_ActiveTabChanged"> <asp:TabPanel ID="tab1" runat="server"> <HeaderTemplate> <img src="images/uc1.png" alt="" /> </HeaderTemplate> <ContentTemplate> <asp:Panel ID="pnlUC1" runat="server"> </asp:Panel> </ContentTemplate> </asp:TabPanel> <asp:TabPanel ID="tab2" runat="server"> <HeaderTemplate> <img src="images/uc2.png" alt="" /> </HeaderTemplate> <ContentTemplate> <asp:Panel ID="pnlUC2" runat="server"> </asp:Panel> </ContentTemplate> </asp:TabPanel> </asp:TabContainer>
代码背后:
protected void TabContainerUp_ActiveTabChanged(object sender, EventArgs e) { string tabName = TabContainerUp.ActiveTab.ID; getActiveTab(tabName); } public void getActiveTab(string tabName) { UserControl uc; //uc. switch (tabName) { case "tab1": pnlUC1.Controls.Clear(); uc = Page.LoadControl("~/Controls/UC1.ascx") as UserControl; pnlUC1.Controls.Add(uc); break; case "tab2": pnlUC2.Controls.Clear(); uc = Page.LoadControl("~/Controls/UC1.ascx") as UserControl; pnlUC2.Controls.Add(uc); break; } }
您需要Page_Load最迟在每个回发中重新创建动态创建的控件,其ID与以前相同。因此,您可以在中加载并将它们添加到面板中ActiveTabChanged,但是您需要在下一次回发中重新创建它们Page_Init/Page_Load。因此,您需要在某处存储要重新创建的内容(fe in Session)。
Page_Load
ActiveTabChanged
Page_Init/Page_Load
Session
但是我假设您使事情变得比必要的复杂,您甚至可以声明性地(在aspx上)以初始Visible状态创建这些UserControl false。然后,您只需要根据需要在中切换控件的可见性ActiveTabChanged。
Visible
false
注意 :不可见的服务器端Web控件根本不会呈现给客户端,并且不会ViewState保存任何内容。因此,声明它们没有任何缺点。
ViewState
延迟加载 并不意味着您尽可能晚地创建这些控件,而是意味着您要尽可能晚地对其进行数据绑定。因此,切勿将它们从page_load(用户控件中的fe)绑定到数据库,而只能将其绑定到需要时从页面调用的方法(此处是fromActiveTabChanged)。因此,您可以BindData在UserControl中实现一个公共方法UC1。
page_load
BindData
UC1
这是一个简单的例子:
switch (tabName) { case "tab1": UC1_1.Visible = true; UC1_1.BindData(); UC1_2.Visible = false; break; case "tab2": UC1_1.Visible = false; UC1_2.Visible = true; UC1_2.BindData(); break; }
在你的 UserControl
UserControl
public void BindData() { // put here all your databinding stuff // that is in page_load now ... }
这可能是关于延迟加载ajax TabPanels的最佳教程: