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 :

[C#] Durée de vie variables membre


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 96
    Par défaut [C#] Durée de vie variables membre
    Bonjour

    Je débute en ASP.NET et j'aimerais savoir si les instances de classes associées au webforms sont détruites ou non quand on envoie un formulaire qui permet d'actualiser la page.
    J'ai une page de recherche dans une base de données dans laquelle on peut ajouter un filtre de recherche en cliquant sur un bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    public class ListFilter : List<searchfilter>
    {
    	...
    }
     
    public partial class Recherche : System.Web.UI.Page
    {
    	ListFilter _filters = null;
     
    	protected void Page_Load(object sender, EventArgs e)
    	{
    		if (!this.IsPostBack) {
    			_filters = new ListFilter();
    			...
    		}
    	}
     
    	protected void bAddFilter_Click(object sender, EventArgs e)
    	{
    		_filters.Add(new searchfilter());
    		...
    	}
    La ligne _filters.Add(new searchfilter()); déclenche une NullReferenceException. Donc apparemment l'instance est effectivement détruite. Est-ce exact ?

    D'une manière plus générale, comment créer des variables membre qui "survivent" au rechargement de la page ?

    Merci
    Rémi

  2. #2
    Membre chevronné
    Inscrit en
    Octobre 2005
    Messages
    400
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 400
    Par défaut
    Lorsque tu reviens, elle est effectivement remise à zero. Il faut reconstruire ta liste à chaque fois. tu peux la garder en session ou dans le viewstate

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 96
    Par défaut
    Merci pour cette réponse rapide.

    Sachant que mes filtres sont dans un Repeater et que je "bind" la variable filters dessus, comment puis-je faire pour le garder dans le viewstate ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <asp:Repeater ID="repFilters" runat="server" OnItemCreated="repFilters_ItemCreated">
    	...
    	<FooterTemplate>
    		<asp:Button ID="bAddFilter" runat="server" OnClick="bAddFilter_Click" Text="Ajouter" />
    	</FooterTemplate>
    	<ItemTemplate>
    		...
    	</ItemTemplate>
    </asp:Repeater>
     
    Code behind:
    protected void Page_Load(object sender, EventArgs e)
    {
    	if (!this.IsPostBack) {
     		_filters = new ListFilter();
    		repFilters.DataSource = _filters;
     		repFilters.DataBind();
    		...
    	}
    }
     
    protected void bAddFilter_Click(object sender, EventArgs e)
    {
    	_filters.Add(new searchfilter());
    	repFilters.DataSource = _filters;
    	repFilters.DataBind();
    	...
    }
    Là je peux ajouter l'attribut EnableViewState="True" dans le Repeater, mais la variables _filters sera tout de même détruite, non ?

  4. #4
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    tout a fait, je te conseille la lecture d'article sur le cycle de vie de la page asp.net.

    Pour conserver ta variable, tu la definis toi meme dans le viewstate au moment opportun dans ton code behind
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ViewState["MaVariable"] = maliste;
    Attention au cycle de vie de ta apge pour la recuperer, apres un postback par contre, tu n'y accederas que lorsque ta page aura repris le viewstate de ton postback.

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 96
    Par défaut
    Merci
    ça me paraît clair maintenant.

    @+
    Rémi

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 15/06/2010, 11h11
  2. Durée de vie de variable static
    Par Braillane dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 23/09/2009, 15h55
  3. [PHP 5.2] Comment est gérée la durée de vie des variables ?
    Par Christophe Charron dans le forum Langage
    Réponses: 4
    Dernier message: 27/02/2009, 11h16
  4. Scope et durée de vie des variables
    Par TwoHorned dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2007, 16h28
  5. Duree de vie des variables
    Par biggione dans le forum Struts 2
    Réponses: 2
    Dernier message: 20/07/2007, 10h12

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