Establecer la pestaña activa en ASP.NET Ajax TabContainer hace que todo el contenedor desaparezca
-
03-07-2019 - |
Pregunta
Tengo una página ASP.NET que utiliza el ASP.NET Ajax Control Toolkit TabContainer . En el evento Page_Load
, estoy ocultando algunas de las pestañas en función de los datos proporcionados a la página. Luego quiero activar una de las pestañas en función del valor de un parámetro de cadena de consulta (opcional).
Entonces tengo:
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;
}
}
}
}
}
Si llego a la página con el conjunto de parámetros de cadena de consulta tabIndex
, desaparece todo el contenedor de pestañas.
Lo extraño es que si cambio LoadDataIntoTabs()
a no ocultar pestañas que no contienen datos, todo funciona como cabría esperar (es decir, se selecciona la pestaña correcta cuando se presenta la página).
¿Alguna idea?
EDIT
Según lo solicitado, aquí hay más detalles:
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;
}
}
Solución
Intente configurar la pestaña deseada a través de ActiveTab como:
ctlTabContainer.ActiveTab = tbpPendingWidgets;
Si configura la primera pestaña en Visible=false
, debe configurar la siguiente página de pestaña visible a través de ActiveTab.
Estoy usando el AjaxControlToolkit Release 30930 (septiembre de 2009).
Otros consejos
Esto funcionó para mí:
Restablecer manualmente el índice, la visibilidad y la pestaña activa.
tabcontainer.ActiveTab = tabname
tabcontainer.Visible = True
tabcontainer.ActiveTabIndex = 2
En otra situación en la que no estaba tratando de configurar la pestaña activa, tuve que restablecer tabcontainer.ActiveTabIndex = 0
.
Así que puse los dos juntos y funcionó.
esto es simple y funcionó perfectamente, prueba esto
asigne el índice de pestañas para cada pestaña que se use en su contenedor de pestañas como ...
luego <cc1:TabContainer ID="TabContainer1" runat="server">
<cc1:TabPanel ID="tab1" runat="server" TabIndex="0">
// su panel
</cc1:TabPanel>
<cc1:TabPanel ID="tab2" runat="server" TabIndex="1">
// su panel
</cc1:TabContainer>
TabContainer1.ActiveTabIndex = 1;
escriba este código en la página cs
<=>