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 :

problème de récupération de la valeur "DropDownListFor"


Sujet :

ASP.NET MVC

  1. #1
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut problème de récupération de la valeur "DropDownListFor"
    bonsoir


    j'ai un menu déroulante razor dans ma page html, leur contenu (nom des clients) est récupéré d’après une base de données (table : Client) . les informations sont affiché sans problème .

    code de le menu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     @Html.DropDownListFor(model => model.Identifiant, Model.info.Select(h => new SelectListItem
                               {
                                   Value = h.Identifiant.ToString(),
                                   Text = h.Nom
                               }),
                           "SVP")
    Mais j'ai un probléme lors de l'ajout dans la base de données. car toujours la valeur de menu "DropDownListFor" (info) est null par contre les autres paramètres sont bien récupéré.

    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
     
     public ActionResult AddComm()
            {
                var model = new Commande
                 {
                     info = Db.Clients.ToList()
                 };
     
                return View(model);
            }
     
            [HttpPost]
            public ActionResult AddComm( Commande cl)
            {
                if(ModelState.IsValid){
     
                    Db.Commandes.Add(cl);
                    Db.SaveChanges();
                return RedirectToAction("GetComm");
                }
                else{
                ViewBag.s="erreur d'insertion";
                    }
                return RedirectToAction("Add");
            }
    Merci de m'iader pour résoudre ce probléme

  2. #2
    Membre actif
    Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 127
    Points : 288
    Points
    288
    Par défaut
    J'ai peut-être raté qqch mais je ne comprends pas d'où vient ton Model.Identifiant... ?

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 51
    Points : 74
    Points
    74
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @Html.DropDownListFor(m => m.Categorie, new SelectList(Model.Categories <-- Collections, "Id", "Titre", Model.Categorie <-- selectedValue (int)), "Toutes les catégories" <-- valeur par défault)
    Essais ça.

  4. #4
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par Buzzak Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @Html.DropDownListFor(m => m.Categorie, new SelectList(Model.Categories <-- Collections, "Id", "Titre", Model.Categorie <-- selectedValue (int)), "Toutes les catégories" <-- valeur par défault)
    Essais ça.
    j'ai essayé votre proposition mais il affiche que ce probléme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'System.Web.Mvc.SelectList' ne contient pas un constructeur qui accepte des arguments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      @Html.DropDownListFor(m => m.Identifiant, new SelectList(Model.Clients, "Identifiant", "Nom", Model.Clients.Identifiant, 
                          "Toutes les catégories"))

    Merci de m'aider

  5. #5
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par chadoum Voir le message
    J'ai peut-être raté qqch mais je ne comprends pas d'où vient ton Model.Identifiant... ?
    l'identifiant du client se trouve dans la classe client , mais dans la page j'ai besoin du @model commande pour faire l'ajout d'une commande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class Commande
        {
     
            public int Identifiant{ get; set; }
     
            public int IdentifiantClient { get; set; }
     
            public decimal Prix { get; set; }
     
            public virtual Client Clients { get; set; }
     
            List<Commande> listeCommandes = new List<Commande> { };
     
        }

  6. #6
    Membre actif
    Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 127
    Points : 288
    Points
    288
    Par défaut
    Alors, il y a plusieurs choses :

    Je pense que ton model devrait plus ressembler à qqch comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class CommandeViewModel
        {
            public int Identifiant { get; set; }
     
            public int IdentifiantClient { get; set; }
     
            public decimal Prix { get; set; }
     
            public virtual List<Client> Clients { get; set; }
     
            List<Commande> listeCommandes = new List<Commande> { };
        }
    Parce que dans ton code ta classe Commande contient une liste de Commande et un objet Client

    Ensuite pour récupérer l'identifiant du Client sélectionné dans la liste déroulante :
    Dans la vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @using (Html.BeginForm())
    {
    @Html.DropDownListFor(m => m.Identifiant, new SelectList(Model.Clients, "Identifiant", "Nom"))
        <input type="submit" name="name" value="POST" />
    }
    Et dans le controller :
    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
     
    public ActionResult Index()
            {
                Client cli = new Client { Identifiant = 1, Nom ="test"};
                Client cli2 = new Client { Identifiant = 2, Nom = "test2" };
                List<Client> clients = new List<Client>();
                clients.Add(cli);
                clients.Add(cli2);
                var model = new CommandeViewModel
                {
                    Identifiant = 9,
                    Clients = clients
                };
                return View(model);
            }
     
            [HttpPost]
            public ActionResult Index(CommandeViewModel cl)
            {
                return null;
            }
    Pour la vue Index, je charge une liste bidon de Clients (à toi de gérer par rapport à ta récupération de l'identifiant de la commande). Et dans le post, si tu mets un point d'arrêt sur "cl", tu récupères bien l'identifiant sélectionné.

    Voilà, j'espère que ça pourra t'aider

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 51
    Points : 74
    Points
    74
    Par défaut
    +1 pour chadoum c'est comme ça que je procède aussi, il y a tout pour réussir à le faire sois-même dans l'exemple
    Bon courage!

Discussions similaires

  1. Réponses: 12
    Dernier message: 12/02/2007, 12h56
  2. [AJAX] Récupération d'une valeur en retour d'un php
    Par lodan dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 08/02/2007, 21h18

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