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 :

Formulaire de saisie à partir d'une sélection issue de listes déroulantes [Débutant]


Sujet :

ASP.NET MVC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Octobre 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 33
    Par défaut Formulaire de saisie à partir d'une sélection issue de listes déroulantes
    Bonjour,

    Je débute sur Visual Studios 2015 et en développement globalement.

    Je souhaite créer une appli web asp net MVC.
    Mon objectif est de permettre à des responsables d'agence de saisir les horaires de leur personnel chaque jour. (heure d'arrivée et heure de fin).
    J'aimerai qu'ils puisseent sélectionner dans une liste déroulante une agence (centrale), plusieurs salariés (chauffeurs) ainsi que la date correspondante.
    En fonction de ces choix je voudrai qu'ils soient redirigés vers une autre page (cette fois pour saisir les horaires des salariés).
    Celle-ci reprendra les éléments sélectionnés pour obtenir un tableau ou chaque ligne correspond aux chauffeurs et 2 colonnes heuredebut et heurefin non renseignées.
    Ceci afin de saisir les horaires dans ces 2 colonnes.

    Pour le moment j'ai réussi à créer ma page de sélection avec 2 listes déroulantes et une zone de saisie pour la date.

    Mon soucis est de créer ma seconde page de saisie décrite ci-dessus...je bloque...

    Je vous mets mes codes ci-dessous en espérant que vous puissiez m'aiguiller et me donner de bon conseils
    Merci d'avance


    Code C# : 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
    // GET: Sélection des données
            public ActionResult Selection()
            {
                ViewBag.Central = new SelectList(db.Centrales, "ID", "NomCentrale");
     
                var model = db.Chauffeurs;
                return View(new Chauffeurslist() { Chauffeurs = model.ToList() });
            }
     
            [HttpPost]
            public ActionResult Selection(Chauffeurslist model)
            {
                List<Chauffeurheures> list = new List<Chauffeurheures>();
                foreach (var item in model.SelectedIDs)
                {
                    Chauffeurheures c = new Chauffeurheures();
                    c.Chauffeurs = item;
                    var heure = db.Heures.Where(a => a.ChauffeurID == item && a.CentraleID == model.Central && a.DateTravail == model.DateTravail).FirstOrDefault();
                    if (heure != null)
                    {
                        c.heurededebut = heure.HeureDebut;
                        c.heuredefin = heure.HeureFin;
                    }
     
                    list.Add(c);
                }
     
                return RedirectToAction("Saisie");
     
            }
     
    // GET: Saisie
            public ActionResult Saisie()
            {
                // je n'ai aucune idée sur cette partie et comment reprendre les informations de la sélection ci-dessus
                return View();
            }
    Mes modèles

    Code C# : 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 Chauffeur
        {
            [DatabaseGenerated(DatabaseGeneratedOption.None)]
            public int ID { get; set; }
            public string NomChauffeur { get; set; }
            public string PrenomChauffeur { get; set; }
            public DateTime DateNaissance { get; set; }
     
            public virtual ICollection<Heure> Heures { get; set; }
        }
    }
     
    public class Chauffeurheures
        {
            public int Chauffeurs { get; set; }
            public string heurededebut { get; set; }
            public string heuredefin { get; set; }
     
            public virtual Chauffeur Chauffeur { get; set; }
        }
     
    public class Chauffeurslist
        {  
            public List<Chauffeur> Chauffeurs { get; set; }
            public List<int> SelectedIDs { get; set; }
            public int Central { get; set; }
            public DateTime DateTravail { get; set; }
        }
    Voici ma vue de selection

    Code ASP.NET : 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
    @model ApplicationWeb.Models.Chauffeurslist
     
    @{
        ViewBag.Title = "Selection";
    }
     
    <h2>Sélection des chauffeurs pour une saisie des horaires des chauffeurs</h2>
    @using (Html.BeginForm())
    {
        <div>
            <h4>Horaires</h4>
            <hr />
            <dl class="dl-horizontal">
                <dt>
                    @Html.DropDownList("Central", null, htmlAttributes: new { @class = "form-control" })
                </dt>
                <dt>
                    @Html.ListBoxFor(m => m.SelectedIDs, new MultiSelectList(Model.Chauffeurs, "ID", "NomChauffeur", Model.SelectedIDs))
                </dt>
                <dt>
                    @Html.TextBoxFor(m => m.DateTravail)
                </dt>
                <dd>
            </dl>
            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" value="Enregistrer la saisie" class="btn btn-default" />
                </div>
            </div>
        </div>
    }

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2013
    Messages : 29
    Par défaut
    Bonjour,

    C'est juste pour afficher la liste que tu as créé dans Selection ?
    Tu n'es pas obligé, pour accéder à une vue, de passer par une autre action ayant le même nom que la vue.

    Au lieu du RedirectToAction, tu peux retourner vers la vue qui te servira à afficher la liste des chauffeurs avec ta liste
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    return View("Saisie", list );

  3. #3
    Membre averti
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Octobre 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 33
    Par défaut
    Merci de ton aide.

    J'ai un peu de mal à comprendre le sens de ta question dsl je suis très novice...
    Je ne comprend pas le code que tu as écrit ?

    Ma vue Sélection (je pense est indispensable) car c'est elle qui ma permettre de sélectionner les informations pour construire mon tableau de saisie:
    - Liste déroulante (1 seul choix pour les centrales)
    - Liste déroulante (n chois pour les chauffeurs)
    - Saisie d'une date

    Je pensais pouvoir récupérer ces informations dans une seconde vue pour construire le tableau mais je n'y parviens pas.
    J'ai commencé à écrire quelque chose (voir ci-dessous)dans la vue sélection pour passer les informations à mon contrôleur "Saisie" mais je ne suis pas convaincu d'aller dans la bonne direction :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
     @Html.ActionLink("Saisie", "Saisie", new { CentraleID =  , ChauffeurID = }) ;

    Mon gros problème est sur le passage d'information entre deux vues ?
    Est-il possible de passer plusieurs variables (celles-ci pouvant être des listes ??) en paramètre dans mon contrôleur en les récupérant à partir d'une ligne de code telle que décrite ci-dessus dans une vue ?
    Peut-être existe-il de meilleurs solutions ?

    Dsl si je suis un peu brouillon dans mes explications.

    Merci

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2013
    Messages : 29
    Par défaut
    Je vais essayer d'être plus clair dans mon explication.

    Ce que j'ai compris, quand tu valides la saisie de l'horaire dans le formulaire de la vue Selection, tu passes dans l'action "Selection" qui n'autorise que le [HttpPost].
    A partir de là, tu veux passer la liste (List<Chauffeurheures>) vers la vue "Saisie" pour afficher un tableau.

    Dans mon explication, il ne faut pas passer par une autre action pour envoyer ta liste à la vue "Saisie", mais directement envoyer la liste à la vue.
    Le chemin parcouru :
    Au lieu de : action Selection > action Saisie > vue Saisie
    Tu aurai : action Selection > vue Saisie


    Le View(), renvoyé en fin d'action, peux prendre en paramètre le nom de la vue, suivi de la liste que tu souhaites lui transmettre.
    Voir : https://msdn.microsoft.com/fr-fr/lib...v=vs.118).aspx

    Donc au lieu de, dans l'action Selection
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    return RedirectToAction("Saisie");
    Tu aurais :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    return View("Saisie", list );

    Et tu récupères dans la vue la liste de tes Chauffeurheures que tu pourras afficher dans le tableau.
    L'action Saisie n'est plus utile sauf si tu le destine à d'autre tâches.

    Ce qui est bien avec MVC, c'est qu'une action n'a pas nécessairement une vue portant le même nom, voir pas de vue du tout.

    J'espère avoir répondu à ta question sur le fait de passer à la vue Saisie ta liste pour l'afficher dans un tableau.

  5. #5
    Membre averti
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Octobre 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 33
    Par défaut
    Oui merci suite à ton dernier message j'ai bien avancé dans mon projet!

    J'arrive bien maintenant à afficher les éléments que j'ai sélectionné dans mes listes dans ma vue "Saisiedesheures".

    Je me confronte à présent à un dernier problème qui est d'enregistrer en base de données (dans la table heure = modèle heure ci-dessous) les éléments affichés dans ma vue.
    Je ne trouve pas le moyen d'enregistrer mes infos dans mon modèle "heure" sachant que ma vue "Saisiedesheures" se base sur le modèle "Chauffeurheures".
    Est-ce possible ?

    Ci-dessous :
    - Contrôleur "Selectiondesheures" après les modifications que tu m'a apporté
    - Vue "Saisiedesheures"
    - Modèle "heure"

    Merci encore

    Code C# : 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
     
    [HttpPost]
            public ActionResult Selectiondesheures(Chauffeurslist model)
            {
                List<Chauffeurheures> maliste = new List<Chauffeurheures>();
                foreach (var item in model.SelectedIDs)
                {
                    Chauffeurheures c = new Chauffeurheures();
                    c.Chauffeurs = item;
                    var heure = db.Heures.Where(a => a.ChauffeurID == item && a.CentraleID == model.Central && a.DateTravail == model.DateTravail).FirstOrDefault();
                    if (heure != null)
                    {
                        c.heurededebut = heure.HeureDebut;
                        c.heuredefin = heure.HeureFin;
                        c.DateTravail = heure.DateTravail;
     
                        var chauffeur1 = db.Chauffeur.Where(b => b.ID == item).FirstOrDefault();
                        var centrale1 = db.Centrales.Where(d => d.ID == model.Central).FirstOrDefault();
     
                        c.NomChauffeur = chauffeur1.NomChauffeur;
                        c.NomCentrale = centrale1.NomCentrale;
                    }
                    else { 
                    c.heurededebut = "";
                    c.heuredefin = "";
                    c.DateTravail = model.DateTravail;
     
                    var chauffeur2 = db.Chauffeur.Where(b => b.ID == item).FirstOrDefault();
                    var centrale2 = db.Centrales.Where(d => d.ID == model.Central).FirstOrDefault();
     
                    c.NomChauffeur = chauffeur2.NomChauffeur;
                    c.NomCentrale = centrale2.NomCentrale;
                    }
                    maliste.Add(c);
                }
                return View("Saisiedesheures",maliste);
            }

    Code C# : 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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    @model IEnumerable<PigeonApplicationWeb.Models.Chauffeurheures>
     
    @{
        ViewBag.Title = "Saisiedesheures";
    }
     
    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
     
    <h2>Saisie des heures du controlleur</h2>
     
            <table class="table">
                <tr>
                    <th>
                        @Html.DisplayNameFor(model => model.NomCentrale)
                    </th>
                    <th>
                        @Html.DisplayNameFor(model => model.DateTravail)
                    </th>
                    <th>
                        @Html.DisplayNameFor(model => model.NomChauffeur)
                    </th>
                    <th>
                        @Html.DisplayNameFor(model => model.heurededebut)
                    </th>
                    <th>
                        @Html.DisplayNameFor(model => model.heuredefin)
                    </th>
                </tr>
     
                @foreach (var item in Model)
                {
                    <tr>
                        <td>
                            @Html.DisplayFor(modelItem => item.NomCentrale)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item.DateTravail)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item.NomChauffeur)
                        </td>
                        <td>
                            <div class="bottom-left">
                                <div class="col-md-10">
                                    @Html.EditorFor(modelItem => item.heurededebut, new { htmlAttributes = new { @class = "form-control" } })
                                    @Html.ValidationMessageFor(modelItem => item.heurededebut, "", new { @class = "text-danger" })
                                </div>
                            </div>
                        </td>
                        <td>
                            <div class="bottom-left">
                                <div class="col-md-10">
                                    @Html.EditorFor(modelItem => item.heuredefin, new { htmlAttributes = new { @class = "form-control" } })
                                    @Html.ValidationMessageFor(modelItem => item.heuredefin, "", new { @class = "text-danger" })
                                </div>
                            </div>
                        </td>
                    </tr>
                }
     
            </table>
     
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Valider la saisie" class="btn btn-default" />
        </div>
    </div>
     
    <div>
        @Html.ActionLink("Retourner aux choix précédents", "Selectiondesheures")
    </div>
     
    }


    Code C# : 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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
     
    namespace PigeonApplicationWeb.Models
    {
        public class Heure
        {
            public int HeureID { get; set; }
            public int CentraleID { get; set; }
            public int ChauffeurID { get; set; }
            public DateTime DateTravail { get; set; }
            public string HeureDebut { get; set; }
            public string HeureFin { get; set; }
     
            public virtual Centrale Centrale { get; set; }
            public virtual Chauffeur Chauffeur { get; set; }
        }
    }

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2013
    Messages : 29
    Par défaut
    Pour commencer, tu va devoir modifier ton BeginForm pour qu'il envoie les valeurs vers une action qui accepte ton heure de début et de fin.
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    @Html.BeginForm("ton action", "ton controller", FormMethod.Post)
    Tu nommeras ton action comme tu voudras, pour le controller, tu mets le même que ton "Selectiondesheures".
    Le FormMethod.Post permet d'envoyer les éléments dans l'entête de la requête http au lieu de tout mettre dans la query.

    L'action doit pouvoir recevoir des heures
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    public ActionResult TonAction(List<Heure> heures)

    Ensuite, il faut que tous les champs de saisie aient pour name la même orthographe que ton modèle Heure pour le modèle binding
    Si ces champs ne doivent pas être saisie, utilise des champs hidden
    Enfin pour les nom (attribut name) de tes champs doivent être préfixé par, par exemple "Heures[i]" où i est un incrément de chaque ligne affichée.
    pour avoir :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" name="Heure[0].heurededebut" class="form-control" />


    Ton projet s'appelle "Pigeon" ?

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

Discussions similaires

  1. Réponses: 19
    Dernier message: 06/10/2023, 16h10
  2. [MySQL] Afficher le résultat d'une sélection dans deux listes déroulantes d'un formulaire
    Par ritouthai dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/09/2013, 09h14
  3. Réponses: 5
    Dernier message: 17/10/2007, 18h17
  4. Réponses: 1
    Dernier message: 15/06/2007, 22h28
  5. [MySQL] requête à partir de la sélection de ma liste déroulante
    Par wail00 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 07/05/2007, 16h00

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