J'ai rencontré un problème intéressant en essayant de cloner un panneau de template dans mon contrôle ajax tabcontainer. L'idée est que j'ai un contrôle personnalisé sur le premier onglet qui répertorie certaines choses, et pour ajouter une nouvelle chose, vous cliquez sur le nouveau bouton sur le contrôle personnalisé, ce qui soulève un événement dans le contrôle/page qui contient le tabcontainer. Ce contrôle/page va ensuite cloner l'onglet caché et ajouter le clone au tabcontainer.Clonage AJAX TabPanels
avec ce balisage je reçois ce que je dois à la fois le premier onglet (contenant la liste) et les onglets suivants (par le tabpanel basé sur un modèle caché prêt pour le clonage) ...
<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>
Ok permet endosseront que sur le premier panneau dans mon contrôle personnalisé j'ai un bouton qui soulève l'événement "MyEvent" qui à son tour appelle la méthode "CreateTabFromTemplate".
Maintenant, ce que je veux faire est de copier le panneau caché "TemplatePanel" et l'ajouter au conteneur de l'onglet.
Dans mon code derrière, le code de la méthode pour ajouter le nouveau panneau de tabulation pour mon conteneur onglet fonctionne quelque chose comme ça ...
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;
}
Tout en regardant bien jusqu'à présent ... mais je raté quelque chose .. Je n'ai pas modélisé l'en-tête des nouveaux onglets ... il semble que tout ce que je peux faire est de définir le texte. Suivant cet exemple: http://forums.asp.net/t/1108611.aspx/1 Je peux faire ce que j'essaie de faire mais je ne veux pas écrire une classe qui définit mon modèle d'en-tête Je veux instancier une instance de ma version de balisage et passer cette instance à mon nouveau panneau.
Je ne suis pas convaincu que cela puisse être fait ... est-ce un bug avec le contrôle ou ai-je raté quelque chose?!?!
Des idées?
C'est ce que je faisais ... essayez de combiner votre code avec le mien, vous verrez que le contenu de l'onglet contient deux modèles qui est faux ... le contenu ne doit contenir que le code contenttemplate et le modèle d'en-tête doit définir l'onglet lui-même. – War