Frage

Ich habe eine ASP.NET-Seite, die die ASP.NET Ajax verwendet Control Toolkit TabContainer . Im Page_Load Fall mich verstecke ich einige der Basis Laschen an den auf der Seite angegebenen Daten. Ich möchte dann auf eine der Registerkarten auf dem Wert eines (optional) Query-String-Parameter aktiv basieren.

So habe ich:

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

Wenn ich die Seite mit dem tabIndex Query-String-Parametersatz getroffen, verschwinden die gesamten Registerkarte Container.

Das Merkwürdige ist, dass, wenn ich LoadDataIntoTabs() ändern nicht ausblenden Registerkarten, die keine Daten enthalten, alles funktioniert wie Sie es erwarten würden (dh die richtige Registerkarte ausgewählt wird, wenn die Seite rendert).

Irgendwelche Ideen?


Bearbeiten

Wie gewünscht, sind hier weitere Details:

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;
    }
}
War es hilfreich?

Lösung

Versuchen Sie, die gewünschten Registerkarte über ActiveTab einstellen wie:

ctlTabContainer.ActiveTab = tbpPendingWidgets;

Wenn Sie den ersten Registerkarte auf Visible=false dann müssen Sie die nächsten sichtbaren Registerkarte über ActiveTab eingestellt.

Ich bin die AjaxControlToolkit Veröffentlichung 30930 (September 2009) verwendet wird.

Andere Tipps

Das funktionierte für mich:
die Sichtbarkeit und das aktive Register manuell Zurücksetzen des Index.

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

In einer anderen Situation, wo ich nicht die aktiven Registerkarte zu setzen versuche, hatte ich tabcontainer.ActiveTabIndex = 0 zurückgesetzt werden.

Also habe ich die beiden zusammen und es funktionierte.

Das ist einfach und hat perfekt funktioniert, versuchen Sie dies

weisen Sie die Registerkarte Index für jeden Reiter, der wie in der Tab-Container verwendet werden ....

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

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

</cc1:TabContainer>

schreibt diesen Code in cs Seite

TabContainer1.ActiveTabIndex = 1;

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top