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