2010-08-03 2 views
1

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.

Répondre

0

Vous devez exécuter votre code dans la page init ou pre init, car en chargeant la page, la page est déjà construite avec l'état d'affichage.

Questions connexes