AJAX Control Toolkit TabContainer点击按钮切换标签页无效问题求助
AJAX Control Toolkit TabContainer点击按钮切换标签页无效问题求助
我来帮你排查这个问题!你的思路没问题,但因为局部回传的特性,导致TabContainer的状态没有同步到前端页面,所以点击按钮后看不到标签切换效果。下面是具体的解决方法:
问题根源
你的每个TabPanel内部都有独立的UpdatePanel,但TabContainer本身不在任何UpdatePanel中。当按钮点击触发局部回传时,只有当前TabPanel里的UpdatePanel内容会被更新,而TabContainer的标签切换状态(比如ActiveTabIndex)没有被同步到前端DOM,所以页面上看不到标签切换的变化。
解决方案
1. 将整个TabContainer包裹在一个UpdatePanel中
这样局部回传时,TabContainer的状态会被完整更新到前端。修改你的.aspx代码如下:
<asp:UpdatePanel ID="UpdatePanel_TabContainer" runat="server"> <ContentTemplate> <ajaxToolkit:TabContainer ID="TabContainer1" runat="server" ActiveTabIndex="1" AutoPostBack="True" OnActiveTabChanged="TabContainer1_ActiveTabChanged"> <ajaxToolkit:TabPanel runat="server" HeaderText="List" ID="listpanel"> <HeaderTemplate> <asp:Image ID="Image3" runat="server" ImageAlign="AbsMiddle" ImageUrl="~/Images/List.gif" /> <strong><span style="font-size: 9pt">List</span></strong> </HeaderTemplate> <ContentTemplate> <asp:UpdatePanel ID="UpdatePanel3" runat="server"> <ContentTemplate> <asp:Button ID="Button3" runat="server" Text="goto tab 2" OnClick="Button3_Click" /> </ContentTemplate> </asp:UpdatePanel> </ContentTemplate> </ajaxToolkit:TabPanel> <ajaxToolkit:TabPanel ID="formpanel" runat="server" HeaderText="Form"> <HeaderTemplate> <strong><span style="font-size: 9pt">Form</span></strong> </HeaderTemplate> <ContentTemplate> <asp:UpdatePanel ID="UpdatePanel2" runat="server"> <ContentTemplate> <asp:Button ID="Button4" runat="server" Text="goto tab 1" OnClick="Button4_Click" /> </ContentTemplate> </asp:UpdatePanel> </ContentTemplate> </ajaxToolkit:TabPanel> </ajaxToolkit:TabContainer> </ContentTemplate> </asp:UpdatePanel>
2. 优化后台代码(可选,但更可靠)
直接设置ActiveTabIndex比赋值ActiveTab在局部回传场景下更稳定,修改你的C#代码:
protected void Button3_Click(object sender, EventArgs e) { // 切换到Form标签页(索引是1,标签页从0开始计数) TabContainer1.ActiveTabIndex = 1; } protected void Button4_Click(object sender, EventArgs e) { // 切换到List标签页(索引是0) TabContainer1.ActiveTabIndex = 0; }
额外说明
如果你不想把整个TabContainer包裹在UpdatePanel里,也可以给每个按钮所在的UpdatePanel添加TabContainer作为异步触发器,但包裹整个容器的方式更直观,也更容易维护。
内容来源于stack exchange
相关产品推荐
相关产品推荐

