【发布时间】:2011-08-20 08:43:01
【问题描述】:
尝试在我的 ajax tabcontainer 控件中克隆模板面板时遇到了一个有趣的问题。
我的想法是我在第一个选项卡上有一个自定义控件,其中列出了一些内容,要添加一个新内容,您单击自定义控件上的新按钮,这会在包含选项卡容器的控件/页面中引发一个事件.然后该控件/页面将克隆隐藏的选项卡面板并将克隆添加到选项卡容器。
使用此标记,我可以从第一个选项卡(包含列表)和任何后续选项卡(由准备克隆的隐藏选项卡面板模板化)中获得我需要的内容...
<asp:TabContainer ID="TabContainer1" runat="server">
<asp:TabPanel ID="ui_pnl1" HeaderText="My Panel" runat="server">
<ContentTemplate>
<cc1:myListOfThings ID="list" runat="server" OnMyEvent="CreateTabFromTemplate" />
</ContentTemplate>
</asp:TabPanel>
<asp:TabPanel ID="TemplatePanel" runat="server" Visible="false">
<HeaderTemplate>
<span>Hello World</span><asp:LinkButton ID="ui_btnRemove" runat="server" Text="x" />
</HeaderTemplate>
<ContentTemplate>
Some content for my panel
</ContentTemplate>
</asp:TabPanel>
</asp:TabContainer>
好的,现在假设在我的自定义控件的第一个面板上,我有一个引发“MyEvent”事件的按钮,该事件又调用方法“CreateTabFromTemplate”。
现在我要做的是复制隐藏面板“TemplatePanel”并将其添加到选项卡容器中。
在我后面的代码中,用于将新选项卡面板添加到我的选项卡容器的方法代码的工作方式类似于...
protected void CreateTabFromTemplate(object sender, EventArgs e)
{
// create a new tab panel
TabPanel newPanel = new TabPanel();
// instantiate the hidden content template from the hidden note panel in the new panel
ui_tpNoteCreator.ContentTemplate.InstantiateIn(newPanel);
// add the panel to the available tabs and select it
TabContainer1.Tabs.Add(newPanel);
TabContainer1.ActiveTab = newPanel;
}
到目前为止一切看起来都不错...但我错过了一些东西...我还没有模板化新的 tabpanels 标题...看来我所能做的就是设置文本。
按照这个例子:http://forums.asp.net/t/1108611.aspx/1 我可以做我想做的事,但我不想编写一个定义我的标题模板的类我想实例化我的标记版本的实例并将该实例传递给我的新面板。
我不相信这可以做到...这是控件的错误还是我错过了什么?!?!
有什么想法吗?
【问题讨论】:
标签: c# asp.net ajax ajaxcontroltoolkit