La définition de l'onglet actif dans ASP.NET Ajax TabContainer entraîne la disparition de tout le conteneur
-
03-07-2019 - |
Question
J'ai une page ASP.NET utilisant le ASP.NET Ajax Control Toolkit TabContainer . Dans l'événement Page_Load
, je cache certains des onglets en fonction des données fournies à la page. Je souhaite ensuite activer l'un des onglets en fonction de la valeur d'un paramètre de chaîne de requête (facultatif).
J'ai donc:
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 je visite la page avec le paramètre de tabIndex
chaîne de requête défini, l'ensemble du conteneur d'onglets disparaît.
Ce qui est étrange, c’est que si je change LoadDataIntoTabs()
en pas , si les masques qui ne contiennent aucune donnée sont masqués, tout fonctionne comme prévu (c’est-à-dire que le bon onglet est sélectionné lors du rendu de la page).
Des idées?
MODIFIER
Comme demandé, voici plus de détails:
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;
}
}
La solution
Essayez de définir l'onglet souhaité via ActiveTab comme suit:
ctlTabContainer.ActiveTab = tbpPendingWidgets;
Si vous définissez le premier onglet sur Visible=false
, vous devez définir la page à onglet visible suivante via ActiveTab.
J'utilise la version 30930 d'AjaxControlToolkit (septembre 2009).
Autres conseils
Cela a fonctionné pour moi:
Réinitialisation manuelle de l'index, de la visibilité et de l'onglet actif.
tabcontainer.ActiveTab = tabname
tabcontainer.Visible = True
tabcontainer.ActiveTabIndex = 2
Dans une autre situation où je n'essayais pas de définir l'onglet actif, je devais réinitialiser tabcontainer.ActiveTabIndex = 0
.
J'ai donc mis les deux ensemble et cela a fonctionné.
c'est simple et a parfaitement fonctionné, essayez ceci
attribuez l'index d'onglets pour chaque onglet utilisé dans votre conteneur d'onglets, par exemple ....
alors <cc1:TabContainer ID="TabContainer1" runat="server">
<cc1:TabPanel ID="tab1" runat="server" TabIndex="0">
// votre panneau
</cc1:TabPanel>
<cc1:TabPanel ID="tab2" runat="server" TabIndex="1">
// votre panneau
</cc1:TabContainer>
TabContainer1.ActiveTabIndex = 1;
écrivez ce code dans la page cs
<=>