J'utilise la version AjaxControlToolkit 4.1.40412.0, .NET 4.0, VS2010AJAXControlToolkit TabContainer - bug dans l'ajout/la suppression dynamique d'onglets?
Utilisation du contrôle de TabContainer Je veux ajouter/supprimer des onglets dynamiquement, mais il semble que tous mes changements dynamiques ne sont pas persistants. Voici mon scénario: Je commence avec un tabcontainer avec 1 tabpanel (codé en dur, c'est-à-dire ajouté au moment du design), puis dynamiquement, j'ajoute plus de tabboards et cache le tableau d'origine (run time). Comme prévu, je ne vois que les nouveaux panneaux sur la page, mais chaque fois que j'essaie de sélectionner un autre onglet, tout le contrôle revient à son état de conception, c'est-à-dire qu'il affiche uniquement le panneau d'origine censé disparaître et les nouveaux panneaux ne sont nulle part à trouver. Qu'est-ce que je rate? Je suppose que comme une solution de contournement, je peux ajouter une cinquantaine d'onglets au moment du design, puis masquer/afficher dynamiquement plutôt que supprimer/ajouter, mais cela semble maladroit, bâclé et inutile.
Voici mon code si vous voulez dupliquer la question:
ASPX
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"/>
<asp:TabContainer ID="tcMain" runat="server" AutoPostBack="true" ScrollBars="auto" >
<asp:TabPanel ID="tbTab0" runat="server" HeaderText="Tab0"/>
</asp:TabContainer>
</div>
</form>
</body>
</html>
ASPX.VB
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
For i As Integer = 0 To 3
Dim ol As New Label
ol.Text = i.ToString
Dim oT As New AjaxControlToolkit.TabPanel
oT.Controls.Add(ol)
oT.HeaderText = i.ToString
tcMain.Tabs.Add(oT)
Next
For i As Integer = 1 To tcMain.Tabs.Count
If tcMain.Tabs(tcMain.Tabs.Count - i).HeaderText = "Tab0" Then tcMain.Tabs.RemoveAt(tcMain.Tabs.Count - i)
Next
End If
End Sub
End Class
Note: Si vous commentez "If Not Page.IsPostBack Then", c'est à dire exécuter le code nder à chaque chargement de page, le tabcontainer fonctionne comme prévu - je peux sélectionner n'importe quel onglet sans problèmes. Dans mon vrai projet, cela ne peut pas être la solution - j'ajouterai/enlèverai des onglets basés sur l'entrée d'utilisateur, donc à moins que je garde un journal de tous les changements faits au contrôle je ne peux pas charger ces changements chaque fois que la page charge.