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 :

Jointure avec ASPNET MVC3


Sujet :

ASP.NET MVC

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tchad

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    Bonjour
    Je viens de découvrir ASP.NET MVC et je développe une application ASP.NET MVC 3 avec VS2010 et BD SQL Server 2008 dans le cadre de mon projet de fin d'étude.
    J'ai deux tables
    EMPLOYE(EMPID, #DPTID, Nom, Prenom, Titre, Tel, Email, Adresse)
    DEPARTEMENT(DPTID, Designation, Description)

    Je peux effectuer des opération CRUD sur la table département à l'aide d'EF. Par contre cela devient plus compliqué lorsqu'il s'agit de faire la jointure des deux tables dans le CONTROLLER et afficher les valeurs dans la VIEW je voudrais afficher la liste des EMPLOYE avec la DESIGNATION de leur DEPARTEMENT et pour la modification d'un employé, afficher un DropDownList à la place de TextBox pour choisir le département. Mais je n'y arrive pas. J'ai bien suivi des tutaux sans succès.
    SVP quelqu'un pourrait-il m'expliquer pas à pas comment y parvenir en utilisant VS2010?

    voilà les tutaux que j'ai suivi:
    - Developper une appli de gestion de contact avec ASP.NET MVC: http://msdn.microsoft.com/fr-fr/asp.net/dd627541.aspx

    - Creation d'une application de gestion avec ASP.NET MVC (c#)
    http://dotnet.developpez.com/mvc/create-movie-database



    voila par exemple la vue Departement/Index.cshtml qui me permet d'afficher la liste des départements. Il contient également des liens pour modifier, supprimer, afficher les détails d'un département et ça marche nickel:

    Code HTML : 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
    @model IEnumerable<SyagecApp.Models.DEPARTEMENT>
     
    @{
        ViewBag.Title = "Gestion des département";
    }
     
    <h2>Liste des départements</h2>
     
    <p>
        @Html.ActionLink("Ajouter nouveau département", "Create")
    </p>
    <table>
        <tr>
            <th></th>
            <th>
                Désignation
            </th>
            <th>
                Description
            </th>
        </tr>
     
    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.ActionLink("Modifier", "Edit", new { id=item.DPTID }) |
                @Html.ActionLink("Details", "Details", new { id=item.DPTID }) |
                @Html.ActionLink("Supprimer", "Delete", new { id=item.DPTID })
            </td>
            <td>
                @item.DPTDES
            </td>
            <td>
                @item.DPTDESC
            </td>
        </tr>
    }
     
    </table>

    Le controlleur: DepartementController

    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using SyagecApp.Models;
     
    namespace SyagecApp.Controllers
    {
        public class DepartementController : Controller
        {
            //
            // GET: /Departement/
     
            private SyagecDBContextDataContext db = new SyagecDBContextDataContext();
     
            public ActionResult Index()
            {
                return View(db.DEPARTEMENT.ToList());
            }
     
            //
            // GET: /Departement/Details/5
     
            public ActionResult Details(int id)
            {
                DEPARTEMENT dpt = (from d in db.DEPARTEMENT
                                   where d.DPTID == id
                                   select d).First();
     
     
                if (dpt == null)
                    return RedirectToAction("Index");
                return View("Details", dpt);
     
              //  return View();
            }
     
            //
            // GET: /Departement/Create
     
            public ActionResult Create()
            {
                return View();
            } 
     
            //
            // POST: /Departement/Create
     
            [HttpPost]
            public ActionResult Create(DEPARTEMENT newDpt)
            {
                if (!ModelState.IsValid)
                    return View();
     
                try
                {
                    // TODO: Add insert logic here
     
                    db.DEPARTEMENT.InsertOnSubmit(newDpt);
                    db.SubmitChanges();
     
     
                    return RedirectToAction("Index");
     
                }
                catch(Exception)
                {
                    return View();
                }
            }
     
            //
            // GET: /Departement/Edit/5
     
            public ActionResult Edit(int id)
            {
                DEPARTEMENT dpt = (from d in db.DEPARTEMENT
                                   where d.DPTID == id
                                   select d).First();
                if (dpt == null)
                    return RedirectToAction("Index");
                return View(dpt);
                //return View();
            }
     
            //
            // POST: /Departement/Edit/5
     
            [HttpPost]
            public ActionResult Edit(int id, DEPARTEMENT model)
            {
     
                var dpt = (from d in db.DEPARTEMENT
                           where d.DPTID == model.DPTID
                           select d).First();
     
                try
                {
                    // TODO: Add update logic here
     
     
                    UpdateModel(dpt);
                    db.SubmitChanges();
     
                    return RedirectToAction("Index");
                }
                catch(Exception)
                {
                    ModelState.AddModelError("", "Edit Failure, see inner exception");
                    return View();
                    //return View();
                }
            }
     
            //
            // GET: /Departement/Delete/5
     
            public ActionResult Delete(int id)
            {
                DEPARTEMENT dpt = (from d in db.DEPARTEMENT
                                   where d.DPTID == id
                                   select d).First();
                if (dpt == null)
                    return RedirectToAction("Index");
                return View(dpt);
               // return View();
            }
     
            //
            // POST: /Departement/Delete/5
     
            [HttpPost]
            public ActionResult Delete(int id, FormCollection collection)
            {
                DEPARTEMENT dpt = (from d in db.DEPARTEMENT
                                   where d.DPTID == id
                                   select d).First();
                try
                {
                    // TODO: Add delete logic here
     
                    db.DEPARTEMENT.DeleteOnSubmit(dpt);
                    db.SubmitChanges();
     
     
                    return RedirectToAction("Index");
                }
                catch(Exception)
                {
                    return View();
                }
            }
        }
    }

    Je suis bloqué au niveau de EmployeController,

    Voici un peu le contenu de l'action Index() qui retourne les résultats de la requete de jointure.

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public ActionResult Index()
            {
                IQueryable<EMPLOYE> query =
                     from emp in db.EMPLOYE
                     join dpt in db.DEPARTEMENT on emp.DPTID equals dpt.DPTID
                     select emp;
     
                return View(query.ToList());
            }
    Le problème crucial:
    Comment créer la vue associé?
    Comment parcourir et récuperer les élément de la liste à partir de la vue?
    Peut être bien que je fais fausse route mais j'ai besoin d'aide.
    Merci

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 27
    Points : 54
    Points
    54
    Par défaut
    Bonjour,
    Pour la Liste des employés, tu as 2 options:
    1) Utiliser les propriétés de navigation. En pratique, dans ta vue qui liste les employés, tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <td>
    @item.DEPARTEMENT.DPTDES
    </td>
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <td>
    @item.DPTID
    </td>
    Dans ce cas, pas besoin de faire de requêtes avec jointures dans ton controller, ceci suffit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return View(db.EMPLOYE.ToList());
    2) Tu tiens à utiliser une requête avec jointure => Créer une classe EmployeViewModel qui collera aux infos que tu voudrais avoir dans ta vue.
    Concrètement:
    ta classe EmployeViewModel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class EmployeViewModel
    {
     public string Nom { get; set; }
     public string Tel { get; set; }
     .
     .
     .
     public string Departement { get; set; }
    }
    Dans ton controller:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    from emp in db.EMPLOYE
    join dpt in db.DEPARTEMENT on emp.DPTID equals dpt.DPTID
    select new EmployeViewModel { Nom = emp.Nom ,..., Tel = emp.Tel, Departement = dpt.DPTDES };
    Enfin, tu utilises EmployeViewModel comme "Model Class" pour ta vue.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tchad

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Points : 6
    Points
    6
    Par défaut

    la solution 1 marche nickel, je n'ai pas encore testé la deuxième solution mais ça devrait aller.
    Merci infiniment. j'étais bloqué là depuis des semaines et je ne savais pas que c'était aussi simple.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 27
    Points : 54
    Points
    54
    Par défaut
    Enfin pour le DropDownListFor:
    Dans ton controller, pour l'édition d'un employé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public ActionResult Edit(int id)
    {
     ViewData["ListeDepartements"] = new SelectList(db.DEPARTEMENT.ToList(), "DPTID", "DPTDES");
     return View(db.EMPLOYE.Single(emp => emp.EMPID.Equals(id)));
    }
    Et dans ta vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <div class="editor-label">
     @Html.LabelFor(model => model.DPTID)
    </div>
    <div class="editor-field">
     @Html.DropDownListFor(model => model.DPTID, (SelectList)ViewData["ListeDepartements"])
     @Html.ValidationMessageFor(model => model.DPTID)
    </div>

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut mm problème
    salut j'ai presque le mm problème

    en fait j'ai crée mon modèle de classes , et généré leur codes ainsi que la base de données liée automatiquement . J'ai une table USERSet et une autre RFQSet,
    je voudrais afficher une liste des RFQ existant dans la base de données avec pour chaque RFQ le nom de son USER sachant que les 2 tables sont reliées par la clé USER_ID , j'ai essayé les 2 solutions que vous avez proposé mais ca ne marche pas, déjà dans la vue fortement typée que je génère pour RFQ il n'y'a pas du tout de référence à ma clé étrangère alors je me demande ce qui peut bien clocher .

    voici le code généré pour la classe RFQ :

    namespace MvcApplication4.Models
    {
    using System;
    using System.Collections.Generic;

    public partial class RFQ
    {
    public int RFQ_Id { get; set; }
    public System.DateTime RFQ_DATE_TIME { get; set; }
    public bool IsSpecificRFQ { get; set; }
    public string RESIDUAL_MATURITY { get; set; }
    public double AMOUNT { get; set; }
    public decimal CPTY_YIELD { get; set; }
    public string STATUS { get; set; }

    public virtual USER USER { get; set; }
    public virtual RFQ_RESPONSE RFQ_RESPONSE { get; set; }
    public virtual COUNTERPARTY COUNTERPARTY { get; set; }
    public virtual BOND BOND { get; set; }
    }
    }


    aidez moi svp à découvrir ce qui ne va pas!

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

Discussions similaires

  1. jointure avec 2 id différent pour 1 seul table.
    Par vermo dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 10/11/2005, 15h19
  2. jointure avec clé composée de 2 colonnes
    Par free07 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/10/2005, 07h07
  3. Réponses: 2
    Dernier message: 27/10/2005, 11h15
  4. jointure avec xslt
    Par nemya dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 27/09/2005, 10h48
  5. [SAGE]Jointures avec SGBD
    Par mat.M dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 09/10/2003, 12h23

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