Pergunta

Eu tenho uma página ASP.NET que usa o ASP.NET Ajax Control Toolkit TabContainer . No caso Page_Load, que eu estou escondendo algumas das guias com base nos dados fornecidos à página. Então eu quero fazer uma das guias ativos com base no valor de um parâmetro (opcional) string de consulta.

Então, eu tenho:

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 eu acertar a página com a consulta tabIndex conjunto de parâmetros corda, todo o contêiner guia desaparece.

O estranho é que se eu mudar LoadDataIntoTabs() para não ocultar guias que não contêm dados, tudo funciona como seria de esperar (ou seja, o guia correto está selecionado quando a página é processada).

Todas as idéias?


Editar

Conforme solicitado, aqui estão mais detalhes:

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

Solução

Tente definir a guia desejada via ActiveTab como:

ctlTabContainer.ActiveTab = tbpPendingWidgets;

Se você definir o primeiro guia para Visible=false então você tem que definir a próxima página guia visível através ActiveTab.

I'am usando o AjaxControlToolkit lançamento 30930 (setembro de 2009).

Outras dicas

Isso funcionou para mim:
repor manualmente o índice, a visibilidade e o separador activo.

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

Em outra situação onde eu não estava tentando definir a aba ativa, eu tive que reiniciar tabcontainer.ActiveTabIndex = 0.

Então eu coloquei os dois juntos e funcionou.

Este é simples e funcionou perfeitamente, tente este

atribuir o índice de tabulação para cada guia que são usados ??em seu recipiente separador como ....

então <cc1:TabContainer ID="TabContainer1" runat="server">

<cc1:TabPanel ID="tab1" runat="server" TabIndex="0"> // seu painel </cc1:TabPanel> <cc1:TabPanel ID="tab2" runat="server" TabIndex="1"> // seu painel </cc1:TabPanel>

</cc1:TabContainer>

escrever esse código em cs página

TabContainer1.ActiveTabIndex = 1;

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top