Vra

Ek het 'n ASP.NET bladsy wat die ASP.NET Ajax gebruik beheer Toolkit TabContainer . In die Page_Load geval, ek wegkruip sommige van die oortjies wat gebaseer is op die wat aan die bladsy data. Ek wil dan na een van die tabs aktiewe gebaseer op die waarde van 'n (opsioneel) navraag string parameter maak.

So ek het:

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

As ek die bladsy te tref met die tabIndex navraag string parameter stel, die hele blad houer verdwyn.

Die vreemde ding is dat as ek LoadDataIntoTabs() verander nie verberg oortjies wat geen data bevat, alles werk soos jy sou verwag (dit wil sê die korrekte blad is gekies as die bladsy lewer).

Enige idees?


wysig

As versoek, hier is meer inligting:

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;
    }
}
Was dit nuttig?

Oplossing

Probeer om die verlangde blad stel via ActiveTab soos:

ctlTabContainer.ActiveTab = tbpPendingWidgets;

As jy die eerste blad om Visible=false dan moet jy die volgende sigbare blad bladsy stel via ActiveTab stel.

psalmsing met behulp van die AjaxControlToolkit Release 30930 (September 2009).

Ander wenke

Dit werk vir my:
Met die hand die Herstel van die indeks, die sigbaarheid en die aktiewe blad.

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

In 'n ander situasie waar ek nie probeer om die aktiewe blad stel, moes ek tabcontainer.ActiveTabIndex = 0 herstel.

Ek sit die twee saam en dit het gewerk.

Dit is eenvoudig en gewerk perfek, probeer hierdie

toewys die blad indeks vir elke blad wat gebruik word in jou blad houer soos ....

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

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

</cc1:TabContainer>

skryf hierdie kode in cs bladsy

TabContainer1.ActiveTabIndex = 1;

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top