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 MVC Discussion :

Récupérer les valeurs cochées @RadioButtonFor/CheckBoxFor


Sujet :

ASP.NET MVC

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 74
    Points
    74
    Par défaut Récupérer les valeurs cochées @RadioButtonFor/CheckBoxFor
    Bonjour,

    Je débute avec MVC et Razor et j'ai des soucis lorsque j'essaye de créer un quiz qui contient plusieurs questions, chacune pouvant permettre une seule (radio bouton) ou plusieurs (checkboxes) selections.

    Voilà ma structure:
    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
    public class QuizViewModel
        {
            public string quizTitle { get; set; }
            public string quizListDisplay { get; set; }
            public List<QuizQuestion> questions { get; set; }
            public Guid owner { get; set; }
        }
    
        public class QuizQuestion
        {
            public int questionId { get; set; }
            public int order { get; set; }
            public string questionTitle { get; set; }
            public List<QuizChoice> choices { get; set; }
            public bool isSingleResponseQuestion { get; set; }
        }
    
        public class QuizChoice
        {
            public int choiceId { get; set; }
            public string choiceTitle { get; set; }
            public int index { get; set; }
            public bool isCorrectAnswer { get; set; }
            public bool isChecked { get; set; }
            public string feedback { get; set; }
            public int selectedAnswer { get; set; }
        }
    et ici ma vue:
    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
     
     
    ...
    @using (Html.BeginForm("Validate", "Quiz"))
    {
        @for (int i = 0; i < Model.questions.Count(); i++)
        {
              <ul>
                     @{ int j = 0; }
                     @foreach (var ch in Model.questions[i].choices)
                     {
                          <li>
                                 @Html.RadioButtonFor(m => m.questions[i].choices[j].isChecked, true, new { id = ch.choiceId, @Name = "group" + i}) @ch.choiceTitle
                                 @Html.HiddenFor(m => m.questions[i].choices[j].isChecked) 
                          </li>
                    }
              </ul>
          }
     
    <input type="submit" value="Valider" />
     
    }
    J'arrivais à récupérer si un "choice" était sélectionné ou pas (isChecked) mais j'ai réalisé que je pouvais sélectionner plusieurs radio bouton ce que je ne veux pas; j'ai donc ajouté un Name pour regrouper les choix d'une meme question
    "@Name = "group" + i " mais dès que j'ajoute ce code, je ne récupère plus les isChecked à vrai. Pourquoi le fait d'ajouter un Name m'empêche de récupérer les valeurs sélectionnées? Comment puis-je contourner le problème?

    Merci.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Salut,

    L'attribut "name" de la balise est utilisé pour faire le "binding" avec ton "Model".
    Donc en le renommant tu perds le "binding"...

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 74
    Points
    74
    Par défaut
    Salut,
    Merci beaucoup pour ton aide. Et du coup comment je peux faire pour garder l'information isChecked mais en regroupant les radio boutons pour que l'on puisse n'en sélectionner qu'un seul?
    Merci.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 74
    Points
    74
    Par défaut
    J'ai résolu mon problème comme suite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @Html.RadioButtonFor(m => m.questions[i].selectedChoiceId, ch.choiceId)
    en mettant selectedChoiceId dans la classe QuizQuestion parce que c'est ce 1er champ de RadioButton qui fait que les radio boutons sont groupés et j'ai retiré aussi le new id.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/03/2013, 07h55
  2. Réponses: 3
    Dernier message: 14/12/2011, 10h11
  3. Réponses: 3
    Dernier message: 15/05/2008, 13h43
  4. récupérer les valeurs des radio bouttons cochés
    Par wehtam dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/07/2007, 11h23
  5. Réponses: 1
    Dernier message: 18/04/2007, 06h05

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