IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Empêcher conditionnellement l'application/chargement du viewstate.


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Par défaut Empêcher conditionnellement l'application/chargement du viewstate.
    Bonjour,

    Je suis en train de développer une petite application qui permet de saisir des données dans un tableau de x lignes sur y colonnes.
    En fonction de certains paramètres, un tableau n'a pas le même nombre de colonnes et de lignes.
    L'utilisateur, peut, sur un tableau, soit enregistrer les données saisies, soit changer les paramètres pour afficher un tableau différent.

    Pour bénéficier des avantages du viewstate et en respectant les consignes sur la création dynamique de contrôles, je crée la structure de mon tableau (lignes, cellules, texbox et cie) dans l'init de ma page en fonction des paramètres en cours.
    Les propriétés des contrôles (cssclass, contenu des cellules ou des textbox, visibilités, etc) sont initialisées qu'une seule fois par changement de tableau, dans le load de la page, ce qui assure leur enregistrement dans le viewstate.
    Par la suite, en fonction des options d'affichage de l'utilisateur ou des traitement effectués dans la page, je modifie mes contrôles dans les méthodes associés aux différents boutons de la page.

    Jusque là pas de soucis, ça marche nickel (mis à part un viewstate monumental...)...

    En revanche, je me retrouve devant une situation assez incongrue. Lors d'un changement de tableau, toutes les propriétés et les valeurs du tableau doivent être réinitialisées (normal, ce n'est plus le même tableau).
    Dans ma petite tête de développeur, étant donné que tous les ID de mes contrôles changeaient, je pensais que le viewstate du précédent tableau serait effacé. Il n'en est rien !

    Résultat des courses, si je ne réinitialise pas toutes les propriétés de mes contrôles, je me retrouve avec les propriétés des contrôles du tableau précédent. Ce qui, vous vous en doutez, ne m'arrange pas trop...

    Je vois quelques solutions :
    - probablement au niveau de l'init, empêcher l'application/chargement du viewstate sur mon tableau lors d'un changement de tableau. Malgré plusieurs heures de recherche, je n'ai pas trouvé comment faire.
    - au niveau du load, réinitialiser manuellement toutes les propriétés des contrôles modifiés improprement par l'application du viewstate du précédent tableau. C'est un peu chiant à faire, vu que je modifie beaucoup de propriétés et que je risque d'en oublier (lignes, cellules, textbox, etc...).
    - Faire un server.redirect sur ma page pour virer artificiellement le viewstate. Pas très pratique puisque je vais perdre des informations dont j'ai besoin.

    Avez-vous une idée pour empêcher l'application du viewstate de manière conditionnelle (sans le désactiver, c'est quand même utile cette petite bête) ou un moyen pour réinitialiser les propriétés d'un contrôle efficacement (sans perdre son ID pour autant) ?

    Merci d'avance de votre aide.

  2. #2
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Par défaut
    Pour ceux que cela intéresse, bien que cela ne réponde absolument pas à mon problème, j'ai trouvé une analyse intéressante du viewstate :

    http://geekswithblogs.net/FrostRed/a...17/106547.aspx

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Par défaut
    J'ai trouvé la solution au problème...

    L'idée générale consiste a ne pas créer les éléments dans l'init de la page mais plutôt au LoadViewState en overridant cette dernière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        Protected Overrides Sub LoadViewState(ByVal savedState As Object)
            MyBase.LoadViewState(savedState)
            créeStructureTableau()
        End Sub
    Ici, le créeStructureTableau se contente de créer lignes, cellules, textbox et cie en leur donnant un ID unique (aucune autre propriété n'est initialisée pour récupérer l'éventuel état du viewstate). Ce qui rend tous les controles et leurs propriétés disponibles d'un postback sur l'autre pour un traitement par d'autres méthodes (enregistrement, modification, etc)...

    Lors du chargement d'un nouveau tableau, il suffit de supprimer les controles du tableau précédement recrée au moment du LoadViewState, de créer la structure du nouveau tableau et de charger les données de la DAL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Protected Sub ButtonAffichePlanning_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonAffichePlanning.Click
            monTableau.Controls.Clear()
            créeStructureTableau()
            chargeDonnéesTableau()
        End Sub
    Simple et efficace... lorsque l'on a compris...
    Mon exemple étant particulièrement simplifié, voici deux articles particulièrement interessants sur le viewstate et les contrôles dynamiques qui m'ont permis de résoudre mon soucis :

    http://weblogs.asp.net/infinitiesloo...ent-index.aspx

    http://weblogs.asp.net/infinitiesloo...t-1_2900_.aspx (plus particulièrement la partie 4, sur le chargement dynamique de controles et le controle du viewstate)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD17] Application Chargement Plantage
    Par fontag dans le forum WinDev
    Réponses: 13
    Dernier message: 27/04/2012, 14h14
  2. Serveur d'application :Chargement d'un fichier
    Par DanaX dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 09/06/2009, 14h28
  3. Réponses: 3
    Dernier message: 14/06/2008, 22h36
  4. Échec du chargement de viewstate.
    Par wayak3 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 16/02/2007, 10h55
  5. [VB.NET] Échec du chargement de viewstate
    Par lucie.houel dans le forum ASP.NET
    Réponses: 2
    Dernier message: 21/11/2005, 09h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo