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 :

Radio Button dans un repeater et viewstate


Sujet :

ASP.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Points : 110
    Points
    110
    Par défaut Radio Button dans un repeater et viewstate
    Bonjour ,
    en gros j'ai Repeater du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <asp:Repeater ID="rptRadioButton" runat="server" >
        <ItemTemplate>
            <asp:RadioButton  AutoPostBack="true" Text='<%# Eval("Libelle") %>' ClientIDMode="Static"          ID="rbtn"     OnCheckedChanged="AfficherDetail"/><br/>
    </ItemTemplate>
            </asp:Repeater>
    Comme il n'existe pas de commandeName sur les RadioButton je suis obligé de passer par un évenement du RadioButton (Ici OnCheckedChanged)

    dans le code Behind :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    protected void AfficherDetail(object sender, EventArgs e)
            {
                RadioButton rbtn = sender as RadioButton;
                RepeaterItem item = rbtn.Parent as RepeaterItem;
                int intIndex=item.ItemIndex;
                lblDetail.Text=ListeDetail[intIndex];
            }
    Comment faire fonctionner Tout ça sans avoir activer le ViewState.
    Parce que avec le ViewState ca fonctionne Correctement sans être obligé de Binder le repeater à chaque post de la page.

    Y a t-il une autre solution que de passer par le viewState ??

  2. #2
    Membre éclairé Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Points : 755
    Points
    755
    Par défaut
    Y a t-il une autre solution que de passer par le viewState ??
    Oui, mais dans ce cas tu est obligé de Binder le repeater à chaque post de la page. . Le binding va se faire dans l'evenement OnInit de la page.

    A+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Points : 110
    Points
    110
    Par défaut
    Bonjour,

    J'aurais besoin de tes lumières pour m'eclairer sur cette solution de passage par OnInit de la page.

    Je t'avoue que je vois pas tres bien comment le mettre en place.

    Même si mon idée c'est d’éviter de binder le repeater a chaque post, mais bon
    si c'est obligé c'est obligé

    Merci a toi

  4. #4
    Membre éclairé Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Points : 755
    Points
    755
    Par défaut
    Dans ton cas, le passage par l’événement OnInit n'est pas obligatoire. Tu peux faire le binding dans l’événement OnLoad même.
    La contrainte ici c'est la désactivation du viewstate, du coup il faut le binder a chaque post de la page.
    Une des solutions c'est de passer par la collection Form. Comme le contrôle RadioButton est rendu en tag html avec type="radio", sa valeur sera poster vers le serveur via http post.
    Pour revenir a ton problème, change AfficherDetail par ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    protected void AfficherDetail(object sender, EventArgs e)
    {
        foreach (RepeaterItem ri in rptRadioButton.Items)
                {
                    RadioButton rd = (RadioButton)ri.FindControl("rbtn");
                    if (null != rd)
                    {
                        bool isChecked = !string.IsNullOrEmpty(Request.Form[rd.UniqueID]);
                       //ici traitement                        
                    }
                }
    }
    A+

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Points : 110
    Points
    110
    Par défaut
    Il y a bien un truc qui m’échappe ici

    La méthode AfficherDetail est bien liée au RadioButton via l'événement OnCheckedChanged comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OnCheckedChanged ="AfficherDetail"
    Donc : le sender c'est bien le RadioButton, et si je fait pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RepeaterItem item = rbtn.Parent as RepeaterItem;
    je ne peut avoir le context du Repeater !!! car la méthode AfficherDetail n'est pas liée a l'event OnItemCommand du repeater.

    Là ou je suis d’accord avec toi : sans le ViewState il faut bien Binder le repeater avant dans le load de la page pour retrouver le context du repeater.

    Merci à toi

  6. #6
    Membre éclairé Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Points : 755
    Points
    755
    Par défaut
    Citation Envoyé par sou_rif Voir le message
    Il y a bien un truc qui m’échappe ici

    La méthode AfficherDetail est bien liée au RadioButton via l'événement OnCheckedChanged comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OnCheckedChanged ="AfficherDetail"
    Donc : le sender c'est bien le RadioButton, et si je fait pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RepeaterItem item = rbtn.Parent as RepeaterItem;
    je ne peut avoir le context du Repeater !!! car la méthode AfficherDetail n'est pas liée a l'event OnItemCommand du repeater.
    Merci à toi
    Tu as le context du Repeater car tous les controles serveur asp implemente l' interface INamingContainer. Cette interface permet d’établir la hiérarchie existant entre les contrôles(Parent, enfant).

  7. #7
    Membre éclairé Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Points : 755
    Points
    755
    Par défaut
    Si ton problème a été solutionné, merci de passer le topic en "Resolu".

    Merci

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Points : 110
    Points
    110
    Par défaut
    Bonjour,

    De ma part, j'ai passer par la méthode que j'ai poster au début car je la trouve plus simple que de faire un foreach sur tout le repeater afin de détecter le Radiobutton séléctionné.

    et pour résoudre le problème de GroupeName des Radiobutton a l'intérieur du repeater j'ai opté une solution en JavaScript

    Mnt j'ai plus de problème.

    En tout cas Merci.

  9. #9
    Membre éclairé Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Points : 755
    Points
    755
    Par défaut
    Citation Envoyé par sou_rif Voir le message
    Bonjour,

    De ma part, j'ai passer par la méthode que j'ai poster au début car je la trouve plus simple que de faire un foreach sur tout le repeater afin de détecter le Radiobutton séléctionné.

    et pour résoudre le problème de GroupeName des Radiobutton a l'intérieur du repeater j'ai opté une solution en JavaScript

    Mnt j'ai plus de problème.
    En tout cas Merci.
    Merci pour ton retour même si on aimerait voir un peu de code car les autre en ont sûrement besoin

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

Discussions similaires

  1. Sauvegarder la valeur d'un Radio button dans SQLite
    Par axel584 dans le forum Android
    Réponses: 1
    Dernier message: 12/05/2015, 11h04
  2. radio button dans une interface graphique
    Par asma18 dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 26/04/2012, 17h39
  3. Edit text et radio button dans un panel
    Par JuLpM dans le forum Interfaces Graphiques
    Réponses: 10
    Dernier message: 18/07/2007, 15h12
  4. Réponses: 5
    Dernier message: 01/03/2007, 18h08
  5. Réponses: 3
    Dernier message: 18/12/2006, 18h39

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