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 :

Dropdownlist, modèle et conception


Sujet :

ASP.NET MVC

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Dropdownlist, modèle et conception
    Bonjour,
    Je débute en ASP.NET MVC (jusque-là je modifiai des projets non codés par moi).
    J'ai un projet .net mvc4. Il y a quelque chose qui m'échappe, j'ai une table avec des spectacles (ID, nom, prix), une table commande et une table de liaison (avec le nombre de places).
    Dans ma vue pour ajouter une commande, je souhaite afficher 2 choses :
    le listing des différents spectacles avec une dropdown liste pour commande de 0 à 20 places.
    Les champs relatifs à la commande (adresse, nom, prénom, etc...). Le tout avec une validation.
    Là où je bloque, c'est pour ma dropdown liste pour chaque spectacle ?
    Comment je dois procéder ?
    J'ai créé un viewModel qui comprend le champ de mon modèle (nom, prénom, etc..) et dans ma viewModel j'ai rajouté une liste de spectacle.
    Dans le contrôle j'initialise mon viewmodel avec les spectacles de ma base de données.
    Dans la view je peux donc afficher un form pour tous les champs et présenter le listing des spectacles disponible.
    Mon seul problème c'est les dropdownlistes (et la validation, récupération de ses données). J'ai l'impression que c'est ma conception qui est bancale ?
    Bien sûr je pourrais séparer cela en deux vues (une première pour le choix du nombre de places pour chaque spectacle) et une deuxième pour la commande. Mais je voudrais plutôt effectuer ses deux opérations sur une seule page.

    Merci d'avance de m'éclairer. J'espère que j'ai été assez clair.

  2. #2
    Membre actif Avatar de Olivier P.
    Homme Profil pro
    Développeur Front-End chez un éditeur logiciel
    Inscrit en
    Octobre 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Front-End chez un éditeur logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 83
    Points : 206
    Points
    206
    Par défaut
    Bonjour,

    A mon sens, ton ViewModel est correct (si j'ai tout compris )
    Ton choix de conception est cohérent au vu de ce que tu décrit (la conception est toujours discutable, mais c'est un autre problème )

    Si je résume, dans ton ViewModel, tu as des informations issues de ta table Commande ainsi qu'une liste de spectacles issue de la table Spectacle, pour créer ta vue.

    Ta methode POST de gestion de création d'une commande récupère donc bien les informations de la personne qui commande ainsi que le spectacle choisi, via ton ViewModel.

    Tu n'as plus qu'à gérer les modifications de tables qui vont bien dans ta méthode POST.

    Qu'est-ce qui te bloque exactement ?
    MCTS Microsoft 70-536
    MCTS Microsoft 70-515

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Justement la partie que je n'arrive pas à faire s’est récupéré les nombres de billets par spectacle.
    Pour l'instant je les affiche via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    foreach(var spectacle in Model.Spectacles){
    <div>
     
    //la j'aimerais justement une dropdownlist pour choisir les billets
     
    spectacle.Name
    </div>
    }
    Mais je n’arrive pas à faire une dropdownlistfor ?
    Je ne vois pas comment justement créer, valider et récupérer dynamiquement les spectacles ?

  4. #4
    Membre actif Avatar de Olivier P.
    Homme Profil pro
    Développeur Front-End chez un éditeur logiciel
    Inscrit en
    Octobre 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Front-End chez un éditeur logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 83
    Points : 206
    Points
    206
    Par défaut
    2 possibilités:

    première possibilité :

    En pur HTML, sans passer par le stockage dans le ViewModel.

    Donc, pour ta DropDownList, cela donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <select id="ListeNbSpectacles">
          <option>1</option>
          <option>2</option>
          <option>3</option>
    </select>
    Dans ta méthode POST, tu récupères la valeur de la dropdownlist de la manière suivante :

    string maVariable = Request.Form["ListeNbSpectacles"].ToString();

    deuxième possibilité:

    - Tu stockes une variable de type List<string> dans ton ViewModel. Tu lui assignes les valeurs 0, 1, 2, ...

    - Dans ta vue tu peux utiliser un DropDownListFor pour te brancher sur cette liste.

    - Enfin dans ta méthode POST, tu récupères le selectedValue.


    Avis perso : Je n'utiliserai pas une Dropdownlist pour gérer le nb de places, mais plutôt un champ de saisie simple.
    MCTS Microsoft 70-536
    MCTS Microsoft 70-515

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Le souci c'est que le nombre de spectacles provient de la base de données.

    Actuellement j'ai fait comme ça :

    View
    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
     
    @for (int i = 0; i < Model.Spectacles.Count; i++)
             {
                        <tr>
                            <td>
                                @Html.DropDownListFor(x => x.Spectacles[i], new SelectList(Model.ListSpectacles))
                            </td>
                            <td >
                                @Model.Spectacles[i].Name
                            </td>
                            <td >
                                Prix : @Model.Spectacles[i].Price.-  
                            </td>
                        </tr>
     
             }
    ViewModel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     public IList<Spectacle> Spectacles { get; set; }
     public IEnumerable<int> ListSpectacles = new List<int>(new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 });
     public IDictionary<int, int> ChoicetSpectacle { get; set; }
    Pour récupérer et valider les données, j'essaye ça dans mon controller

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     public IList<Spectacle> Spectacles { get; set; } model.ChoiceSpectacle = new Dictionary<int, int>() { };
                for (int i = 0; i < model.Spectacles.Count; i++)
                {
                    model.ChoicetSpectacle.Add(i, int.Parse(Request.Form["Spectacles["+i+"]"]));
                }
                if (!ModelState.IsValid)
                {
    Sans succès, j'ai une erreur (impossible de récupérer les valeurs du POST)
    Je suis pourtant juste non ?

  6. #6
    Membre actif Avatar de Olivier P.
    Homme Profil pro
    Développeur Front-End chez un éditeur logiciel
    Inscrit en
    Octobre 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Front-End chez un éditeur logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 83
    Points : 206
    Points
    206
    Par défaut
    Je ne comprend pas bien. D'un côté, tu dis :

    Le souci c'est que le nombre de spectacles provient de la base de données.
    Et après tu fais une alimentation en dur...

    public IEnumerable<int> ListSpectacles = new List<int>(new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 });
    Donc, si tu fais une alimentation en dur, privilégie la première méthode que je te propose (en pur HTML).

    Maintenant, si au contraire, tes données proviennent d'une table, je ne vois pas où est le souci, puisque ta colonne de table est forcément présente dans ton ViewModel...

    Tout ça est un peu confu

    Je te suggère de consulter ce tutoriel en MVC, qui te permettra d'appréhender un peu mieux les rudiments de cette architecture.
    http://www.asp.net/mvc/tutorials/mvc...o-aspnet-mvc-4
    MCTS Microsoft 70-536
    MCTS Microsoft 70-515

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Pour t'aider, voici deux bouts de code que j'utilise pour mes dorpdownlist

    DropDownListViewModel.cs
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class DropDownListViewModel
       {
          public int? Selected { get; set; } // index de la valeur selectionnée de base
          public int Returned { get; set; } // retourne la valeur selectionnée
          public IList<DropDownOption> DropDownOptions { get; set; }
       }
     
       public class DropDownOption
       {
          public int Value { get; set; }
          public string Label { get; set; }
       }

    DropDownListViewModel.cshtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @model XXX.DropDownListViewModel
    @{
       Layout = null;
    }
    @Html.DropDownListFor(m => m.Returned, new SelectList(Model.DropDownOptions, "Value", "Label", Model.Selected))
    Si tu sais comment utiliser les ViewModels et les TemplateEditors tu ne devrais pas avoir de problème a faire fonctionner cela.

Discussions similaires

  1. modèles de conception powerpoint...
    Par youp_db dans le forum Powerpoint
    Réponses: 3
    Dernier message: 27/07/2009, 00h26
  2. [UP] Modèle de conception
    Par arcan2z dans le forum xUP
    Réponses: 2
    Dernier message: 06/11/2007, 14h10
  3. Modèle de conception.
    Par flaca dans le forum Powerpoint
    Réponses: 4
    Dernier message: 02/11/2007, 08h03
  4. Réponses: 2
    Dernier message: 01/09/2006, 08h14
  5. Réponses: 24
    Dernier message: 29/08/2005, 13h33

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