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

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  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