使用用户控件的延迟加载选项卡
我想在AJAX选项卡容器中使用延迟加载选项卡。 我已经实现了它。 但是我遇到的问题是,当我点击一个按钮或触发该用户控件中的任何事件时,它不会被触发; 什么都没发生。
代码隐藏:
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
fe)。
但是我假设你做的事情比必要的更复杂,你甚至可以简单地创建这些UserControls(在aspx上),初始Visible
状态为false
。 然后,您只需要在ActiveTabChanged
根据需要切换控件的可见性。
注意 :不会向客户端呈现不可见的服务器端web ViewState
也不会保存任何ViewState
。 所以声明它们没有任何不利之处。
延迟加载并不意味着您尽可能晚地创建这些控件,但这意味着您尽可能晚地对它们进行数据绑定。 所以永远不要将它们从page_load
(在UserControl中的fe)绑定到数据库,而只从必要时从页面调用的方法(此处来自ActiveTabChanged
)。 因此,您可以在UserControl UC1
实现公共方法BindData
。
这是一个简单的例子:
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
public void BindData() { // put here all your databinding stuff // that is in page_load now ... }
这可能是关于延迟加载ajax TabPanels的最佳教程:
上述就是C#学习教程:使用用户控件的延迟加载选项卡分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1018125.html