动态添加TabPanel并从ASPX创建其ContentTemplate

时间:2013-09-03 23:43:27

标签: c# asp.net user-controls ajaxcontroltoolkit webusercontrol

上下文:

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

自定义控件与TabPanel的{​​{1}}中的内容相对应:

ContentTemplate

代码背后:

<%@ 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名为TabContainer}:

SamplesTabContainer

问题是内容(此处简化为标签)未显示。

如何从ASPX生成自定义控件作为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 }); } } 并显示它?

3 个答案:

答案 0 :(得分:0)

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

我整理了一个测试项目,当使用asp:ScriptManager时,TabPanel将无法显示,尽管它们位于源html中。我还得到一个javascript错误,'Sys.Extended is undefined',这导致了大量的web搜索结果,涵盖了ajax工具包的多个版本。一个常见的建议是切换脚本管理器。这样做修复了TabPanel的可见性并消除了javascript错误。

测试项目的具体内容:
VS2010
使用.Net 4的ASP.Net网络应用程序 IIS Express
使用Nuget
安装AjaxControlToolkit版本4.1.7.725 TabContentTemplateTest.ascx与原始问题中的代码和标记相同 Default.aspx代码隐藏与原始问题中的代码相同 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>

答案 1 :(得分:0)

TabPanel的{​​{1}}设置为OnDemandMode会强制立即添加控件,这样就可以显示它们。

答案 2 :(得分:0)

我刚看到您分享的代码存在两个问题:

  • 添加选项卡后,我没有看到你调用InstantiateIn()函数。
  • 我建议使用InstantiateIn(参考控件容器)

希望这有帮助。