Domanda

Ho una pagina ASP.NET che utilizza ASP.NET Ajax Control Toolkit TabContainer . Nell'evento Page_Load, nascondo alcune delle schede in base ai dati forniti alla pagina. Voglio quindi rendere attiva una delle schede in base al valore di un parametro (facoltativo) della stringa di query.

Quindi ho:

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;
                }
            }
        }
    }
}

Se raggiungo la pagina con il set di parametri tabIndex stringa di query, l'intero contenitore delle schede scompare.

La cosa strana è che se cambio LoadDataIntoTabs() in non nascondo le schede che non contengono dati, tutto funziona come ci si aspetterebbe (ovvero la scheda corretta viene selezionata quando viene eseguito il rendering della pagina).

Qualche idea?


Modifica

Come richiesto, qui ci sono maggiori dettagli:

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;
    }
}
È stato utile?

Soluzione

Prova a impostare la scheda desiderata tramite ActiveTab come:

ctlTabContainer.ActiveTab = tbpPendingWidgets;

Se si imposta la prima scheda su Visible=false, è necessario impostare la pagina della scheda visibile successiva tramite ActiveTab.

Sto usando AjaxControlToolkit Release 30930 (settembre 2009).

Altri suggerimenti

Questo ha funzionato per me:
Ripristino manuale dell'indice, della visibilità e della scheda attiva.

 tabcontainer.ActiveTab = tabname
 tabcontainer.Visible = True
 tabcontainer.ActiveTabIndex = 2

In un'altra situazione in cui non stavo cercando di impostare la scheda attiva, ho dovuto ripristinare tabcontainer.ActiveTabIndex = 0.

Quindi ho messo insieme i due e ha funzionato.

questo è semplice e ha funzionato perfettamente, prova questo

assegna l'indice delle schede per ogni scheda utilizzata nel contenitore delle schede come ....

quindi <cc1:TabContainer ID="TabContainer1" runat="server">

<cc1:TabPanel ID="tab1" runat="server" TabIndex="0"> // il tuo pannello </cc1:TabPanel> <cc1:TabPanel ID="tab2" runat="server" TabIndex="1"> // il tuo pannello </cc1:TabContainer>

TabContainer1.ActiveTabIndex = 1;

scrivi questo codice nella pagina cs

<=>

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top