我想在 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
。因此,您需要在某个地方存储要重新创建的内容(例如,在Session
).
但我假设你让事情变得比必要的更复杂,你可以简单地创建这些 UserControls,甚至以声明方式(在 aspx 上)使用初始Visible
的状态false
。然后你只需要根据需要切换控件的可见性ActiveTabChanged
.
Note:不可见的服务器端 Web 控件根本不会呈现给客户端,也不会ViewState
将会被拯救。所以声明它们没有什么坏处。
延迟加载
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)