1

语境:

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

自定义控件对应于直接在TabPanel's中的内容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):

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并显示它?

4

3 回答 3

0

TabPanel's设置为OnDemandMode立即OnDemandMode.None强制添加控件,从而使它们显示。

于 2013-09-06T16:24:56.360 回答
0

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

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

测试项目的细节:
VS2010
ASP.Net web app using .Net 4
IIS Express
Installed AjaxControlToolkit version 4.1.7.725 using Nuget
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>
于 2013-09-06T07:40:54.147 回答
0

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

  • 添加选项卡后,我没有看到您调用 InstantiateIn() 函数。
  • 我建议使用 InstantiateIn(ref Control container)

希望这可以帮助。

于 2013-09-12T21:32:19.013 回答