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;
    }
}
¿Fue útil?

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

<=>

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top