我有一个使用ASP.NET Ajax Control Toolkit TabContainer的ASP.NET页面。在Page_Load
事件中,我隐藏了一些基于提供给页面的数据的选项卡。然后,我想根据(可选)查询字符串参数的值使其中一个选项卡处于活动状态。
所以我有:
protected void Page_Load ( object sender, EventArgs e )
{
if ( !this.IsPostBack )
{
// Tabs with no data are hidden in here
LoadDataIntoTabs();
PreselectCorrectTab();
}
}
private void PreselectCorrectTab ()
{
if ( ctlTabContainer.Visible )
{
if ( !string.IsNullOrEmpty( Request.QueryString[ "tabIndex" ] ) )
{
int tabIndex = 0;
if ( int.TryParse( Request.QueryString[ "tabIndex" ], out tabIndex ) )
{
if ( ( ctlTabContainer.Tabs.Count > tabIndex ) && ctlTabContainer.Tabs[ tabIndex ].Visible )
{
ctlTabContainer.ActiveTabIndex = tabIndex;
}
}
}
}
}
如果我点击设置了tabIndex
查询字符串参数的页面,整个标签容器就会消失。
奇怪的是,如果我将LoadDataIntoTabs()
更改为而不是隐藏不包含数据的标签,一切都会按预期工作(即在页面呈现时选择正确的标签)
有什么想法吗?
修改
根据要求,这里有更多细节:
private void LoadDataIntoTabs ()
{
LoadPendingWidgetsTab();
LoadDataIntoTab2();
LoadDataIntoTab3();
// etc...
}
private void LoadPendingWidgetsTab ()
{
IList<Widget> pendingWidgets = GetAllPendingWidgets();
if ( ( pendingWidgets != null ) && ( pendingWidgets.Count > 0 ) )
{
tbpPendingWidgets.Visible = true;
tbpPendingWidgets.HeaderText = String.Format( "Pending Widgets ({0})", pendingWidgets.Count );
grdPendingWidgets.DataSource = pendingWidgets;
grdPendingWidgets.DataBind();
}
else
{
tbpPendingWidgets.Visible = false;
}
}
答案 0 :(得分:7)
尝试通过ActiveTab设置所需的标签,如:
ctlTabContainer.ActiveTab = tbpPendingWidgets;
如果您将第一个标签设置为Visible=false
,则必须通过ActiveTab设置下一个可见标签页。
我使用的是AjaxControlToolkit Release 30930(2009年9月)。
答案 1 :(得分:2)
这对我有用:
手动重置索引,可见性和活动选项卡。
tabcontainer.ActiveTab = tabname
tabcontainer.Visible = True
tabcontainer.ActiveTabIndex = 2
在我没有尝试设置有效标签的另一种情况下,我不得不重置tabcontainer.ActiveTabIndex = 0
。
所以我把两者放在一起就行了。
答案 2 :(得分:0)
这很简单,工作得很完美,试试这个
为选项卡容器中使用的每个选项卡分配选项卡索引,如....
然后<cc1:TabContainer ID="TabContainer1" runat="server">
<cc1:TabPanel ID="tab1" runat="server" TabIndex="0">
//你的小组
</cc1:TabPanel>
<cc1:TabPanel ID="tab2" runat="server" TabIndex="1">
//你的小组
</cc1:TabPanel>
</cc1:TabContainer>
在cs页面中编写此代码
TabContainer1.ActiveTabIndex = 1;