【问题标题】:User control does not render in AJAX Control Toolkit TabContainer control用户控件不在 AJAX 控件工具包 TabContainer 控件中呈现
【发布时间】:2011-12-10 22:00:48
【问题描述】:

当我单击“添加选项卡”按钮时,服务器端代码 (tabs.ActiveTabIndex+=1) 会更改选项卡,但选项卡看起来是空的。如果我来回单击,我可以看到用户控件呈现。我错过了什么吗?

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

【问题讨论】:

    标签: c# ajaxcontroltoolkit tabcontainer


    【解决方案1】:

    我不确定这是否相关,但几个月前我遇到了类似的问题。这是关于 SO 的答案,其中links to forums.asp.net 包含详细信息:https://stackoverflow.com/a/6307930/284240

    这也可能是由于从代码隐藏中更改了ActiveTabIndex 而没有触发TabContainerActiveTabChanged 事件。

    尝试使用你的按钮的这个javascript函数onclick,这会导致TabContainer触发这个事件:

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

    然后您可以处理该事件并更改 UserControls 的可见性(并在必要时更新 UpdatePanels)。

    我刚刚注意到我回答了another similar question here on SO

    您是否尝试过设置 ActiveTab-Property(来自 codebehind)或来自 codebehind 或 aspx 的 ActiveTabIndex?

    如果您明确将显示设置为可见,您还可以检查它是否有效:

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

    您确定正确加载了 Ajax 库吗?您的 TabContainer 中是否还有其他 Ajax 控件?检查该页面中的所有 html 是否有效。

    您是否使用最新的 AjaxToolkit 和 ToolkitScriptManager 而不是 ScriptManger?

    【讨论】:

    • 感谢蒂姆,非常彻底的步骤,我很感激。首先,由于某种原因,我似乎无法从前端访问选项卡,上面的 javascript 给了我未定义的 set_activeTab 函数!然后我尝试将 autopostback 设置为 true 这似乎已经解决了问题,然后我将 scriptmanager 更改为 toolkitscript manager,然后我尝试将 autopostback 设置为 false 我让用户控件渲染得很好......自动! :)
    猜你喜欢
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多