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 :

binder valeur d'un user controle cree ?


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut binder valeur d'un user controle cree ?
    Bonjour,

    Est-il possible de binder la valeur (parametre, attribut) d'un user control que l'on a cree ?
    Dans ce controle, on fait des actions en postack pour pas rafraichir toute la page, ca modifie la valeur et donc j'aimerais retrouver la nouvelle valeur apres.

    Voila concretement ce que j'ai fait .]:

    J'ai cree mon controle avec la propriete suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private string mavalue1;
     
    public string MaValue1
            {
     
                get { return mavalue1; }
     
                set { mavalue1= value; }
     
            }
    J'inclus mon controle comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <MesControles:Control1 id="ID1" runat="server" MaValue1='<%# Bind("value1") %>'></MesControles:Control1>
    J'ai bien la valeur qui passe dans le controle quand j'affiche la page pour la premiere fois.

    Mais, dans mon controle, j'ai mis un bouton pour pouvoir quand je click dessus, changer la valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    protected void btn_Click(object sender, EventArgs e)
            {
                mavalue1 = "ahah";
    }
    Il y a un rafraichissement post back et la je ne recupere pas via le bind la valeur ahah que j'ai mis dans mon bouton.

    Cependant, le passage de valeur marche d'un certaine facon car dans le page load du control, si je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     protected void Page_Load(object sender, EventArgs e)
            {
    mavalue1 = "ohoh";
    }
    La je recupere bien la valeur "ohoh"

    Je pense que c'est lappel postback du bouton qui fait perdre la valeur je ne sais pas...

    Une solution ?
    Merci

    ++

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Salut,

    la problème via su postback, c'est vrai mais plutôt du vieswtate qui n'est aps conservé ; c'est normal vu la définition de la propriété.
    essaye un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public string MaValue1
            {
                get 
                {
                    object o = ViewState["MaValue1"];
                    return (o == null) ? string.empty : (string)o;
                }
                set 
                {
                    ViewState["MaValue1"] = maValue1;
                }
            }

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    Ca marche mais j'ai un probleme quand meme, c'est etrange.

    En fait, maintenant, oui la valeur est conservee puisque je la retrouve via le Bind mais je ne la vois plus dans mon controle.
    Enfin au chargement du controle, je voulais afficher la valeur du parametre, et il y a rien dedans, toujours, alors qu'il y a une valeur.
    Et sur un click bouton la je la vois!
    Je m'explique...

    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 string FileID
            {
                get
                {
                    object o = ViewState["UploadOneFileControlFileID"];
                    return (o == null) ? String.Empty : (string)o;
                }
                set
                {
                    ViewState["UploadOneFileControlFileID"] = value;
                }
            }
     
    protected void Page_Load(object sender, EventArgs e)
            {
                info.Text = FileID; // LA JE NE VOIS PAS LA VALEUR
            }
     
    protected void btnUpload_Click(object sender, EventArgs e)
            {
                info.Text = FileID; // LA JE VOIS LA VALEUR
            }
    Donc quand est declenche cet evenement PageLoad... ? Apparemment avant l'initialisation de la varaible non ?

  4. #4
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Bonjour,

    Ce n'est pas tout à fait ça. Pour bien expliquer le cycle de vie d'une page, mais aussi de ces contrôles et de l'application, je me réferre souvent à ceci

    Application: BeginRequest
    Application: PreAuthenticateRequest
    Application: AuthenticateRequest
    Application: PostAuthenticateRequest
    Application: PreAuthorizeRequest
    Application: AuthorizeRequest
    Application: PostAuthorizeRequest
    Application: PreResolveRequestCache
    Application: ResolveRequestCache
    Application: PostResolveRequestCache
    Application: PreMapRequestHandler
    Page: Construct
    Application: PostMapRequestHandler
    Application: PreAcquireRequestState
    Application: AcquireRequestState
    Application: PostAcquireRequestState
    Application: PreRequestHandlerExecute
    Page: AddParsedSubObject
    Page: CreateControlCollection
    Page: AddedControl
    Page: AddParsedSubObject
    Page: AddedControl
    Page: ResolveAdapter
    Page: DeterminePostBackMode
    Page: PreInit
    Control: ResolveAdapter
    Control: Init
    Control: TrackViewState
    Page: Init
    Page: TrackViewState
    Page: InitComplete
    Page: LoadPageStateFromPersistenceMedium
    Control: LoadViewState
    Page: EnsureChildControls
    Page: CreateChildControls
    Page: PreLoad
    Page: Load
    Control: DataBind
    Control: Load
    Page: EnsureChildControls
    Page: LoadComplete
    Page: EnsureChildControls
    Page: PreRender
    Control: EnsureChildControls
    Control: PreRender
    Page: PreRenderComplete
    Page: SaveViewState
    Control: SaveViewState
    Page: SaveViewState
    Control: SaveViewState
    Page: SavePageStateToPersistenceMedium
    Page: SaveStateComplete
    Page: CreateHtmlTextWriter
    Page: RenderControl
    Page: Render
    Page: RenderChildren
    Control: RenderControl
    Page: VerifyRenderingInServerForm
    Page: CreateHtmlTextWriter
    Control: Unload
    Control: Dispose
    Page: Unload
    Page: Dispose
    Application: PostRequestHandlerExecute
    Application: PreReleaseRequestState
    Application: ReleaseRequestState
    Application: PostReleaseRequestState
    Application: PreUpdateRequestCache
    Application: UpdateRequestCache
    Application: PostUpdateRequestCache
    Application: EndRequest
    Application: PreSendRequestHeaders
    Application: PreSendRequestContent
    Comme tu peux le constater, au niveau du PageLoad du contrôle, le ViewState de celui-ci est déjà chargé (c'est pourquoi lorsqu'on ajoute dynamiquement des Contrôles, il faut le faire dans le PageInit pour permettre la gestion du ViewState de ces contrôles dynamiques).

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    J'ai essaye en Debug de suivre les appels...

    Et donc en fait, le Page_Load du controle est appele AVANT la methode set de ma propriete...

    Donc c'est normal qu'il y a rien dedans...

    Mais donc quel evenement de controle/page utilise ? PreRender peut etre ?

  6. #6
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Le chargement du ViewState de ton UserControl se fait AVANT l'évènement onLoad de celui-ci. Par contre le DataBind de ta DataSource se fait au niveau du PreRender de ta Page (et donc après le PageLoad de ton UserControl).

    Je vois que tu as changé le nom de ta properties par FileID, donc je suppose que maintenant tu as quelque chose comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <MesControles:Control1 id="ID1" runat="server" FileID='<%# Bind("value1") %>'></MesControles:Control1>

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/05/2009, 12h08
  2. Réponses: 3
    Dernier message: 19/10/2006, 09h47
  3. [C#] User Control, garder une valeur
    Par Oberown dans le forum ASP.NET
    Réponses: 9
    Dernier message: 06/03/2006, 15h41
  4. [C#] DateTimePicker web user control
    Par titi29 dans le forum ASP.NET
    Réponses: 8
    Dernier message: 29/06/2004, 18h38
  5. [VB.NET] Provoquer le rechargement d'un user control..
    Par didoboy dans le forum ASP.NET
    Réponses: 7
    Dernier message: 30/04/2004, 14h17

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