Definir aba ativa em ASP.NET Ajax TabContainer provoca recipiente toda a desaparecer
-
03-07-2019 - |
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;
}
}
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;