2010-06-30 5 views
1

J'essaie de créer une interface utilisateur à onglets en utilisant un asp: Panel et l'asp: TreeView. Je garde les deux TreeViews initialisés en arrière-plan et quand j'ai besoin d'en afficher un, j'efface le panneau puis j'ajoute le TreeView approprié. Je conserve les TreeView stockés dans la variable Session afin qu'ils ne disparaissent pas lorsque la page est rechargée en raison d'une publication. Mais quand j'essaye d'ajouter le contrôle, j'obtiens une ArgumentOutOfRangeException. Voici le petit extrait de code qui compte:System.Web.UI.Controls.ControlCollection.Add Lance ArgumentOutOfRangeException

<asp:UpdatePanel UpdateMode="Conditional" runat="server"> 
    <ContentTemplate> 
    <asp:LinkButton ID="ContentButton" OnClick="ContentButton_Click" Text="Contents" runat="server" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

<asp:UpdatePanel UpdateMode="Conditional" runat="server"> 
    <Triggers> 
    <asp:AsyncPostBackTrigger ControlID="ContentButton" /> 
    </Triggers> 
    <ContentTemplate> 
    <div id="TOCPanel" runat="server" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Voici le code associé dans le fichier C#.

protected void IndexButton_Click(object sender, EventArgs e) 
{ 
    TOCPanel.Controls.Clear(); 
    // _TreeView points to a property that retrieves the TreeView from Session["TreeView"] 
    TOCPanel.Controls.Add(_TreeView); // This line fails 
    // TOCPanel.Controls.Add(new TreeView()); // This fails with the same error message too 
} 

Y at-il raison

+0

Avez-vous la même erreur lors de l'utilisation d'un au lieu d'un div? –

+0

Il fait la même chose. Mais il ne semble que se bloquer quand je change le contrôle. Donc, lors de l'initialisation, j'ajoute le premier TreeView pendant le chargement de la page. Après avoir appuyé sur le bouton, je change le contrôle et il se bloque. Si j'appuie sur le bouton de celui actuellement chargé, il ne se bloque pas. –

Répondre

0

Je ne sais pas quel est le problème, mais je vous suggère d'ajouter les deux TreeViews au ContentTemplate, puis cacher/leur montrant avec la propriété Visible. Cela vous débarrasse également de votre dépendance à l'égard de Session. J'ai trouvé que l'ajout et la suppression de contrôles à la main devenaient compliqués, en particulier pour ViewState.

Questions connexes