C# 克隆AJAX选项卡面板
我在尝试克隆ajax tabcontainer控件中的模板面板时遇到了一个有趣的问题 我的想法是在第一个选项卡上有一个自定义控件,它列出了一些内容,要添加新内容,请单击自定义控件上的“新建”按钮,这将在包含tabcontainer的控件/页面中引发一个事件。然后,该控件/页面开始克隆隐藏的tabpanel并将克隆添加到tabcontainer 使用此标记,我可以从第一个选项卡(包含列表)和任何后续选项卡(由隐藏的tabpanel模板化,准备克隆)中获得所需的内容 到目前为止一切都很好。。。但是我错过了一些东西。。。我还没有模板化新的选项卡面板标题。。。看来我所能做的就是设置文本 下面这个例子:我可以做我想做的事情,但我不想写一个定义我的头模板的类,我想实例化我的标记版本的一个实例,并将该实例传递给我的新面板 我不相信这是可以做到的。。。这是一个控制错误还是我错过了什么C# 克隆AJAX选项卡面板,c#,asp.net,ajax,ajaxcontroltoolkit,C#,Asp.net,Ajax,Ajaxcontroltoolkit,我在尝试克隆ajax tabcontainer控件中的模板面板时遇到了一个有趣的问题 我的想法是在第一个选项卡上有一个自定义控件,它列出了一些内容,要添加新内容,请单击自定义控件上的“新建”按钮,这将在包含tabcontainer的控件/页面中引发一个事件。然后,该控件/页面开始克隆隐藏的tabpanel并将克隆添加到tabcontainer 使用此标记,我可以从第一个选项卡(包含列表)和任何后续选项卡(由隐藏的tabpanel模板化,准备克隆)中获得所需的内容 到目前为止一切都很好。。。但是我
有什么想法吗?我刚刚测试了以下内容,据我所知,这些内容是有效的 标记:
<asp:TabContainer ID="TabContainer1" runat="server" ViewStateMode="Enabled">
<asp:TabPanel ID="ui_pnl1" HeaderText="My Panel" runat="server">
<ContentTemplate>
<asp:Button ID="btnAddPanel" runat="server" Text="Add Panel" />
</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>
<p>Test Content</p>
</ContentTemplate>
</asp:TabPanel>
</asp: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>
这就是我正在做的。。。尝试将您的代码与我的代码结合起来,您将看到选项卡的内容包含两个模板,这是错误的。。。内容应仅包含contenttemplate代码,标题模板应定义实际选项卡本身。
<asp:TabContainer ID="TabContainer1" runat="server" ViewStateMode="Enabled">
<asp:TabPanel ID="ui_pnl1" HeaderText="My Panel" runat="server">
<ContentTemplate>
<asp:Button ID="btnAddPanel" runat="server" Text="Add Panel" />
</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>
<p>Test Content</p>
</ContentTemplate>
</asp:TabPanel>
</asp:TabContainer>
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.btnAddPanel.Click += new EventHandler(btnAddPanel_Click);
}
void btnAddPanel_Click(object sender, EventArgs e)
{
TabPanel newPanel = new TabPanel();
newPanel.HeaderTemplate = TemplatePanel.HeaderTemplate;
TemplatePanel.ContentTemplate.InstantiateIn(newPanel);
TabContainer1.Tabs.Add(newPanel);
TabContainer1.ActiveTab = newPanel;
}
}
<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>
protected void CreateTabFromTemplate(object sender, EventArgs e)
{
// create a new tab panel
TabPanel newPanel = new TabPanel();
newPanel.HeaderTemplate = TemplatePanel.HeaderTemplate;
newPanel.ContentTemplate = TemplatePanel.ContentTemplate;
// add the panel to the available tabs and select it
TabContainer1.Tabs.Add(newPanel);
TabContainer1.ActiveTab = newPanel;
}
protected void TabContainer_DataBinding(object sender, EventArgs e)
{
foreach(TabPanel panel in TabContainer.Tabs)
{
//identify if this is the correct tab
if(correctTab)
{
// this will find a control anywhere on the panel (eg in both header and content templates)
Label label = panel.FindControl("ControlID") as Label;
label.Text = "Some Business Object Value";
}
}
}