تحديد علامة التبويب النشطة في ASP.NET اياكس TabContainer أسباب الحاوية بأكملها تختفي

StackOverflow https://stackoverflow.com/questions/811657

سؤال

لدي ASP.NET الصفحة التي تستخدم ASP.NET Ajax Control Toolkit TabContainer.في Page_Load الحدث, أنا يختبئ بعض من علامات التبويب على أساس البيانات الواردة إلى الصفحة.ثم تريد أن تجعل واحدة من علامات التبويب النشطة على أساس قيمة (اختياري) معلمة سلسلة الاستعلام.

لذلك يجب:

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

إذا أنا ضربت الصفحة مع tabIndex سلسلة الاستعلام المعلمة مجموعة كاملة التبويب حاوية يختفي.

الشيء الغريب هو أنه إذا قمت بتغيير LoadDataIntoTabs() إلى لا إخفاء علامات التبويب التي لا تحتوي على البيانات, كل شيء يعمل كما تتوقع (أيالصحيح يتم تحديد علامة التبويب عندما يجعل صفحة).

أي أفكار ؟


تحرير

كما طلبت ، وفيما يلي مزيد من التفاصيل:

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;
    }
}
هل كانت مفيدة؟

المحلول

محاولة تعيين علامة التبويب المطلوبة عبر ActiveTab مثل:

ctlTabContainer.ActiveTab = tbpPendingWidgets;

إذا قمت بتعيين أول علامة التبويب Visible=false ثم يجب عليك تعيين مرئية القادمة التبويب الصفحة عبر ActiveTab.

I'am باستخدام AjaxControlToolkit الإفراج 30930 (سبتمبر 2009).

نصائح أخرى

هذا العمل بالنسبة لي:
يدويا إعادة تعيين مؤشر الشفافية علامة التبويب النشطة.

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

في حالة أخرى حيث كنت لا تحاول تعيين علامة التبويب النشطة ، اضطررت إلى إعادة تعيين tabcontainer.ActiveTabIndex = 0.

لذلك أنا وضعت اثنين معا و انها عملت.

هذا هو بسيط و عملت تماما ، حاول هذا

تعيين علامة التبويب فهرس لكل علامة التبويب التي يتم استخدامها في التبويب الخاص حاوية مثل....

ثم <cc1:TabContainer ID="TabContainer1" runat="server">

<cc1:TabPanel ID="tab1" runat="server" TabIndex="0"> //لوحة الخاص بك </cc1:TabPanel> <cc1:TabPanel ID="tab2" runat="server" TabIndex="1"> //لوحة الخاص بك </cc1:TabPanel>

</cc1:TabContainer>

أكتب هذا الكود في الصفحة cs

TabContainer1.ActiveTabIndex = 1;

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top