繁体   English   中英

用户控件未在AJAX控件工具包TabContainer控件中呈现

[英]User control does not render in AJAX Control Toolkit TabContainer control

当我单击“添加选项卡”按钮时,服务器端代码( 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;
        }
    }

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

也可能是由于从后台代码更改了ActiveTabIndex而没有触发TabContainerActiveTabChanged事件引起的。

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

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

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

我只是注意到我在SO上回答了另一个类似的问题

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM