I have an ASP.NET page that uses the ASP.NET Ajax Control Toolkit TabContainer. In the Page_Load
event, I am hiding some of the tabs based on the data given to the page. I then want to make one of the tabs active based on the value of an (optional) query string parameter.
So I have:
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;
}
}
}
}
}
If I hit the page with the tabIndex
query string parameter set, the entire tab container disappears.
The strange thing is that if I change LoadDataIntoTabs()
to not hide tabs that contain no data, everything works as you would expect (i.e. the correct tab is selected when the page renders).
Any ideas?
EDIT
As requested, here are more details:
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;
}
}
Try to set the desired tab via ActiveTab like:
ctlTabContainer.ActiveTab = tbpPendingWidgets;
If you set the first tab to Visible=false
then you have to set the next visible tab page via ActiveTab.
I'am using the AjaxControlToolkit Release 30930 (September 2009).