2009-09-08 8 views
0

Ceci est pour ASP.NET. Pensez au contrôle multiview. Il a 1 à plusieurs contrôles de vue. Chaque contrôle de vue a la capacité de contenir des contrôles, mais, pourtant, une seule vue est visible à la fois. En gardant cela à l'esprit, je pense que je veux "dire" les vues non visibles à ne pas charger, donc, ne pas charger les contrôles enfants.Comment empêcher un contrôle Web de charger des contrôles enfants?

Dans mon exemple, lors du chargement de la vue, je vérifie s'il s'agit de la vue active. Si ce n'est pas actif, j'arrête le traitement de la charge. Malheureusement, les vues qui ne sont pas actives ont leur événement de chargement exécuté et tous les contrôles de l'arborescence de contrôle exécutent leur chargement.

Retour à la question: existe-t-il un moyen d'empêcher les contrôles enfants de s'exécuter pour la vue qui n'est pas active?

Exemple de code:

Private Sub viewDisplayArticle_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles viewDisplayArticle.Load 

    If Not mvwHealthArticles.ActiveViewIndex = mvwHealthArticlesView.DisplayArticle Then Exit Sub 

    callSomeKillerMethod() 

End Sub 

Répondre

1

Set Visible propriété du contrôle enfant non visible sur False, et seulement exécuter le gestionnaire d'événements de charge dans les commandes de l'enfant lorsque visible est vrai.

Private Sub viewDisplayArticle_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles viewDisplayArticle.Load 

    If Visble = True 
    Then ' Load Logic 
    Else ' do nothing 

End Sub 
+0

Bonne idée, mais cela n'est pas autorisé lorsque vous traitez spécifiquement avec System.Web.UI.WebControls.View. System.InvalidOperationException: La propriété Visible d'un contrôle View peut uniquement être définie en définissant la vue active d'un MultiView. – MADCookie

+0

C'est intéressant. J'essaierais probablement de faire un contrôle basé sur un modèle (comme un GridView avec , , etc) car je n'ai jamais essayé un contrôle MultiView ... bonne chance! – jrummell