动态添加一个TabPanel,并从ASPX制作其ContentTemplate

本文关键字:ASPX 并从 ContentTemplate TabPanel 添加 一个 动态 | 更新日期: 2023-09-27 18:30:02

上下文:

AJAX控件工具包TabContainer,其中每个TabPanel都是用代码生成的,其ContentTemplate是一个自定义控件。

自定义控件对应于直接进入TabPanelContentTemplate:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TabContentTemplateTest.ascx.cs" Inherits="WebGUI.Controls.TabContentTemplateTest" %>
<asp:Label runat="server" ID="TabText" />

背后的代码:

public partial class TabContentTemplateTest : UserControl, ITemplate
{
    public string Number { get; set; }
    protected void Page_Load(object sender, EventArgs e)
    {
        TabText.Text = Number;
    }
    public void InstantiateIn(Control container)
    {
        container.Controls.Add(this);
    }
}

创建(TabContainerTest的代码后面,有一个名为SamplesTabContainerTabContainer):

public string[] Numbers = { "zero", "one", "two", "three", "four" };
protected void Page_Load(object sender, EventArgs e)
{
    for (int i = 0; i < 5; i++)
    {
        var tabContent = LoadControl("~/Controls/TabContentTemplateTest.ascx") as TabContentTemplateTest;
        tabContent.Number = Numbers[i];
        SamplesTabContainer.Tabs.Add(new TabPanel
        {
            HeaderText = i.ToString(),
            ContentTemplate = tabContent
        });
    }
}

问题是内容(这里简化为标签)没有显示。

如何从ASPX生成自定义控件作为ContentTemplate并显示它

动态添加一个TabPanel,并从ASPX制作其ContentTemplate

TabPanelOnDemandMode设置为OnDemandMode.None会立即强制添加控件,从而使其显示。

如果使用asp:ScriptManager控件,请尝试使用ajaxToolkit:ToolkitScriptManager控件。

我整理了一个测试项目,当使用asp:ScriptManager时,TabPanel不会显示,尽管它们在源html中。我还收到了一个javascript错误,"Sys.Extended is undefined",这导致了跨越多个版本的ajax工具包的大量网络搜索结果。一个常见的建议是切换脚本管理器。这样做修复了TabPanel的可见性,并消除了javascript错误。

测试项目的具体情况:
VS2010
使用.Net 4的ASP.Net web应用程序
IIS Express
已使用Nuget安装AjaxControlToolkit版本4.1.7.725
TabContentTemplateTest.ascx与原始问题中的代码和标记相同
Default.aspx codebehind与原始问题中的代码相同
Default.aspx标记如下

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
         CodeBehind="Default.aspx.cs" Inherits="WebGUI.Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <ajaxToolkit:ToolkitScriptManager runat="server" ID="ajaxScriptManager" />
    <ajaxToolkit:TabContainer runat="server" ActiveTabIndex="0" 
                              ID="SamplesTabContainer">
    </ajaxToolkit:TabContainer>
</asp:Content>

我只看到您共享的代码有两个问题:

  • 我没有看到你在添加选项卡后调用InstantiateIn()函数
  • 我建议使用InstantiateIn(ref Control容器)

希望这能有所帮助。