0

When I click the "add tab" button, server side code (tabs.ActiveTabIndex+=1) changes tabs, but the tab looks empty. If I click back and forth, I could see the user control renders. Am I missing something?

<ajaxToolkit:TabContainer ID="TabContainer1" runat="server" Height="90%" Width="100%"
        ActiveTabIndex="0" OnDemand="true" AutoPostBack="false" TabStripPlacement="Top"
        CssClass="ajax__tab_xp" ScrollBars="None" UseVerticalStripPlacement="false" VerticalStripWidth="120px">
        <ajaxToolkit:TabPanel ID="tab1" runat="server" HeaderText="1">
            <ContentTemplate>
                <uc:UCCommSubmit ID="ucCommInfo" runat="server" />
            </ContentTemplate>
        </ajaxToolkit:TabPanel>
        <ajaxToolkit:TabPanel ID="TabPanel1" runat="server" HeaderText="" Visible="false">
            <ContentTemplate>
                <uc:UCCommSubmit ID="UCCommSubmit1" runat="server" />
            </ContentTemplate>
        </ajaxToolkit:TabPanel>
        <ajaxToolkit:TabPanel ID="TabPanel2" runat="server" HeaderText="" Visible="false">
            <ContentTemplate>
                <uc:UCCommSubmit ID="UCCommSubmit2" runat="server" />
            </ContentTemplate>
        </ajaxToolkit:TabPanel>
    </ajaxToolkit:TabContainer>
    <div style="padding-right: 20px; float: right">
        <asp:Button ID="btnNext" runat="server" Text="Add Tab" 
            onclick="btnNext_Click" />
    </div>


protected void btnNext_Click(object sender, EventArgs e)
    {
        if (TabContainer1.Tabs.Count > TabContainer1.ActiveTabIndex + 1)
        {
            TabContainer1.Tabs[TabContainer1.ActiveTabIndex + 1].HeaderText = (TabContainer1.ActiveTabIndex + 1).ToString();
            TabContainer1.Tabs[TabContainer1.ActiveTabIndex+1].Visible = true;
            TabContainer1.ActiveTabIndex += 1;
        }
    }
Josh Darnell
  • 11,304
  • 9
  • 38
  • 66
nolimit
  • 814
  • 10
  • 19

1 Answers1

0

I'm not sure if this is related but i had similar problems a few months ago. Here is the answer on SO which links to forums.asp.net that contains detailed informations: https://stackoverflow.com/a/6307930/284240

It could also be caused by changing the ActiveTabIndex from codebehind without triggering the ActiveTabChanged event of the TabContainer.

Try to use this javascript function onclick of your button, that causes the TabContainer to trigger this event:

function changeActiveTab(tabContainerID,tabIndex){
    var ctrl = $find(tabContainerID);
    ctrl.set_activeTab(ctrl.get_tabs()[tabIndex]);
}

Then you can handle the event and change the visibility of your UserControls (and update UpdatePanels if necessary).

I just noticed that i answered another similar question here on SO:

Have you tried to set the ActiveTab-Property(from codebehind) or the ActiveTabIndex from codebehind or aspx?

You could also check if it works if you explicitly set the display to visible:

ActiveTabIndex="0" style="display:block;visibility:visible;"

Are you sure that the Ajax libraries are loaded correctly? Do you have other Ajax-Controls inside of your TabContainer? Check if all of your html in that page is valid.

Are you using the latest AjaxToolkit and the ToolkitScriptManager instead of the ScriptManger?

Community
  • 1
  • 1
Tim Schmelter
  • 450,073
  • 74
  • 686
  • 939
  • thanks Tim, very thorough steps, I appreciate it. First of all, I can't seem to be able to access tabs from the front end for some reason, the above javascript gives me undefined for set_activeTab function!! Then I've tried to set autopostback to true which seemed to have fixed the problem, then I changed scriptmanager to toolkitscript manager, then I tried to set autopostback to false I got the user control to render just fine... automagically!! :) – nolimit Dec 11 '11 at 03:30