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 :

[MVC] : Model binding d'une checkbox OK en HMTLHelper mais pas en <input>


Sujet :

ASP.NET MVC

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2018
    Messages : 2
    Par défaut [MVC] : Model binding d'une checkbox OK en HMTLHelper mais pas en <input>
    Bonjour à tous

    Après plusieurs recherches et essais, je me tourne vers vous

    J'ai une view qui affiche la liste des albums d'une série, avec une checkbox sur chaque album indiquant si je l'ai.

    Le binding de model fonctionne bien avec les HtmlHelper quand j'appelle cette vue via un view model et lorsque je submit le formulaire, les nouvelles valeurs de checkbox sont bien récupérés par le contrôleur

    Cependant lorsque je remplace le htmlhelper de ma checkbox par une balise input (obligé pour faire du CSS), mes checkbox ont bien la bonne valeur sur la vue, mais lorsque je soumet le viewmodel à mon contrôleur, les nouvelles valeurs des ces checkbox ne sont pas pris en compte.

    Qu'est ce que j'aurai oublié dans mon input ?


    Voici le viewmodel, tout simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     public class ListeAlbumsSerieViewModel : BaseViewModel
        {
            public int IdSerie { get; set; }
     
            public List<Album> Albums { get; set; }
     
            public ListeAlbumsSerieViewModel()
            {
                Albums = new List<Album>();
            }
        }
    La classe album

    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
    29
    30
    31
    32
    33
    34
    35
    36
    public class Album
        {
            public virtual int NumAlbum { get; set; }
            public virtual Serie Serie { get; set; }
            public virtual string Titre { get; set; }
            public virtual string Je_L_Ai_O_N{ get; set; }
            public virtual byte[] Image { get; set; }
     
            [NotMapped]
            public virtual bool  Je_Lai { get; set; }
     
            [NotMapped]
            public virtual string ImageData
            {
                get
                {
                    string imreBase64Data = Convert.ToBase64String(Image);
                    return string.Format("data:image/png;base64,{0}", imreBase64Data);
                }
            }
     
            public override bool Equals(object obj)
            {
                Album a = obj as Album;
     
                if (a == null) return false;
     
                return NumAlbum == a.NumAlbum && Serie.Id == a.Serie.Id;
            }
     
            public override int GetHashCode()
            {
                return (Serie.Id * 100) + NumAlbum;
            }
     
        }

    Et la vue

    Code CSHTML : 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <ul class="list-group">
     
     
                @for (int i = 0; i < Model.Albums.Count; i++)            
                {
     
                    <li class="list-group-item">
     
                        <div class="row">
                            <div class="col-lg-2">
                                <div>
                                    <img width="125" src="@Model.Albums[i].ImageData" />
                                </div>
                            </div>
     
                            <div class="col-lg-8">
                                <h3>@Model.Albums[i].Serie.Nom</h3>
                                <h4 class="text-muted">@Model.Albums[i].NumAlbum - @Model.Albums[i].Titre</h4>
                            </div>
     
     
                            @Html.HiddenFor(a => @Model.Albums[i].NumAlbum)
     
                          @*  @Html.CheckBoxFor(a => @Model.Albums[i].Je_Lai)*@
     
     
                            <div class="col-lg-2">
                                <label>
                                    <input type="checkbox" 
                                           class="option-input radio"                                       
                                           name="Albums[@i].Je_Lai"
                                           value="@Model.Albums[i].Je_Lai"
                                           @(Model.Albums[i].Je_Lai ? "checked" : "")
                                            />
                                </label>
                            </div>
     
                        </div>
     
                    </li>
                }
     
            </ul>

    Merci beaucoup !

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2018
    Messages : 2
    Par défaut
    Bon j'ai trouvé en fait

    J'ai regardé le code source généré par le htmlhelper et je m'en suis inspiré

    Pour le checkbox en "mode" input : il faut créer l'input checkbox et un input hidden

    Code CSHTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <input type="checkbox" 
             class="option-input radio"  
             checked="@Model.Albums[i].Je_Lai" 
             name="@("Albums[" + i + "].Je_Lai")" 
             value="true" />
     
    <input type="hidden" 
             name="@("Albums[" + i + "].Je_Lai")"  
             value="false" />

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

Discussions similaires

  1. [Débutant] Gere le binding d'une checkbox
    Par quinroux dans le forum C#
    Réponses: 10
    Dernier message: 02/11/2015, 09h42
  2. [MVC] Model Binding : cherche renseignements
    Par zax-tfh dans le forum ASP.NET
    Réponses: 1
    Dernier message: 23/12/2009, 02h11
  3. Réponses: 1
    Dernier message: 24/01/2008, 12h11
  4. Réponses: 2
    Dernier message: 04/02/2007, 16h16
  5. Réponses: 1
    Dernier message: 13/04/2006, 12h21

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