La définition de l'onglet actif dans ASP.NET Ajax TabContainer entraîne la disparition de tout le conteneur

StackOverflow https://stackoverflow.com/questions/811657

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;
    }
}
Était-ce utile?

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

<=>

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top