gpt4 book ai didi

c# - 克隆 AJAX TabPanel

转载 作者:行者123 更新时间:2023-11-30 17:18:13 27 4
gpt4 key购买 nike

尝试在我的 ajax tabcontainer 控件中克隆模板面板时,我遇到了一个有趣的问题。

我的想法是,我在第一个选项卡上有一个自定义控件,其中列出了一些内容,要添加新内容,您可以单击自定义控件上的新按钮,这会在包含 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;
}

到目前为止一切看起来都不错......但我错过了一些东西......我还没有模板化新的选项卡面板标题......看来我所能做的就是设置文本。

以下示例:http://forums.asp.net/t/1108611.aspx/1我可以做我想做的事,但我不想编写定义我的 header 模板的类我想实例化我的标记版本的实例并将该实例传递给我的新面板。

我不相信这可以完成......这是控件的错误还是我错过了什么?!?!

有什么想法吗?

最佳答案

原来我走错了路......

本质上,分配模板和数据绑定(bind)过程之间存在差异,它仍然不完美,因为我试图将数据传递到我的选项卡模板,但这是基本原则......

标记:

<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";
}
}
}

关于c# - 克隆 AJAX TabPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5914779/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com