bonjour,
Je suis actuellement en stage dans une entreprise qui a créer son propre CMS sous asp.net webfrom et qui veut le refaire sous asp.net MVC2 avec entity Framwork, je doit donc me charger du développement de la nouvelle application.J'utilise Visual Studio 2008 sp1 version 3.5,et je code en C#. N'ayant jamais fait d'asp.net MVC2 avant j'ai suivi les tuto sur le sujet et notamment celui-ci :http://msdn.microsoft.com/fr-fr/asp.net/dd627541.aspx. J'ai donc généré le model avec entity à partir de la base de données existante. Je doit pour l'instant réaliser une maquette de la future application, j'ai donc isolé les trois table suivantes:
Pièce jointe 76583
Sur la base de donnée sqlserver qui contient la base de données qui ma permit de générer mon model entity, il y a dans la table WsgPage les champs idWsgThemeWsgPage, idWsgPageRegroupementWsgPage, et idWsgMasterpageWsgPage qui sont les clé étrangère correspondant au trois autre tables (voir pièce jointe). Mais dans le model ces trois champ on sauté car il sont passé en propriété de navigation. Ces trois champs n'existe donc pas dans mon model et je ne vois pas comment mettre a jour la table page. Voici ma vue :
Du fait que j'ai suivit le tutoriel sité plus haut j'ai créé une couche data(gestion des données), une couche service(gestion du métier et des validateur) et donc au niveau de mon controller j'ai un simple appel a une fonction editPage:
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
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 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MaquetteNouvelleSolution.Models.wsgPage>" %> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <h2>Modifier la page</h2> <% using (Html.BeginForm()) {%> <%= Html.ValidationSummary(true)%> <fieldset> <legend>Fields</legend> <div class="editor-label"> <%= Html.LabelFor(model => model.idWsgPage)%> </div> <div class="editor-field"> <%= Html.TextBoxFor(model => model.idWsgPage)%> <%= Html.ValidationMessageFor(model => model.idWsgPage)%> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.nomWsgPage)%> </div> <div class="editor-field"> <%= Html.TextBoxFor(model => model.nomWsgPage)%> <%= Html.ValidationMessageFor(model => model.nomWsgPage)%> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.defautWsgPage)%> </div> <div class="editor-field"> <%= Html.CheckBoxFor(model => model.defautWsgPage)%> <%= Html.ValidationMessageFor(model => model.defautWsgPage)%> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.visibleWsgPage)%> </div> <div class="editor-field"> <%= Html.CheckBoxFor(model => model.visibleWsgPage)%> <%= Html.ValidationMessageFor(model => model.visibleWsgPage)%> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.verrouWsgPage)%> </div> <div class="editor-field"> <%= Html.CheckBoxFor(model => model.verrouWsgPage)%> <%= Html.ValidationMessageFor(model => model.verrouWsgPage)%> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.positionWsgPage)%> </div> <div class="editor-field"> <%= Html.TextBoxFor(model => model.positionWsgPage)%> <%= Html.ValidationMessageFor(model => model.positionWsgPage)%> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.idParentWsgPage)%> </div> <div class="editor-field"> <%= Html.TextBoxFor(model => model.idParentWsgPage)%> <%= Html.ValidationMessageFor(model => model.idParentWsgPage)%> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.idRedirectionWsgPage)%> </div> <div class="editor-field"> <%= Html.TextBoxFor(model => model.idRedirectionWsgPage)%> <%= Html.ValidationMessageFor(model => model.idRedirectionWsgPage)%> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.niveauWsgPage)%> </div> <div class="editor-field"> <%= Html.TextBoxFor(model => model.niveauWsgPage)%> <%= Html.ValidationMessageFor(model => model.niveauWsgPage)%> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.wsgTheme.idWsgTheme)%> </div> <div class="editor-field"> <%= Html.TextBoxFor(model => model.wsgTheme.idWsgTheme)%> <%= Html.ValidationMessageFor(model => model.wsgTheme.idWsgTheme)%> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.wsgMasterpage.idWsgMasterpage)%> </div> <div class="editor-field"> <%= Html.TextBoxFor(model => model.wsgMasterpage.idWsgMasterpage)%> <%= Html.ValidationMessageFor(model => model.wsgMasterpage.idWsgMasterpage)%> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.wsgPageRegroupement.idWsgPageRegroupement)%> </div> <div class="editor-field"> <%= Html.TextBoxFor(model => model.wsgPageRegroupement.idWsgPageRegroupement)%> <%= Html.ValidationMessageFor(model => model.wsgPageRegroupement.idWsgPageRegroupement)%> </div> <p> <input type="submit" value="Save" /> </p> </fieldset> <% } %> <div> <%= Html.ActionLink("Back to List", "Index") %> </div> </asp:Content>
Dans ma couche data j'ai le code suivant pour la fonction editPage:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 [AcceptVerbs(HttpVerbs.Post)] public ActionResult Edit(wsgPage wsgPageToEdit, int idwsgTheme, int idwsgMasterpage, int idWsgPageRegroupement) { if (_service.EditPage(wsgPageToEdit, idwsgTheme, idwsgMasterpage, idWsgPageRegroupement)) return RedirectToAction("Index"); return View(); }
et dans la couche service:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public wsgPage EditPage(wsgPage wsgPageToEdit, int idwsgTheme, int idwsgMasterpage, int idWsgPageRegroupement) { var pageOrigine = GetPage(wsgPageToEdit.idWsgPage); pageOrigine.wsgTheme = GetTheme(idwsgTheme); pageOrigine.wsgMasterpage = GetMasterpage(idwsgMasterpage); pageOrigine.wsgPageRegroupement = GetPageRegroupement(idWsgPageRegroupement); _entite.ApplyPropertyChanges(pageOrigine.EntityKey.EntitySetName, wsgPageToEdit); _entite.SaveChanges(); return wsgPageToEdit; }
J'arrive a modifier les champs faisant partie de l'entite wsgPage mais pas les trois derniers champs qui correspondent aux "clés étrangères".
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 bool EditPage(wsgPage wsgPageToEdit, int idwsgTheme, int idwsgMasterpage, int idWsgPageRegroupement) { if (!ValidationWsgPage(wsgPageToEdit)) return false; try { _donnee.EditPage(wsgPageToEdit, idwsgTheme, idwsgMasterpage, idWsgPageRegroupement); } catch { return false; } return true; }
Cela fait deux jours que je cherche sur les forums français et anglais mais je n'est rien trouvé de satisfaisant.
J'ai vu sur le forum une question qui aurai pu répondre à ma question ou en tout cas m'apporter une solution (suivre le lien): http://www.developpez.net/forums/d10...3/#post5858598 mais dans la réponse donné par Feez pour la deuxième solution lors de la jointure qu'il prosose je n'est pas accèes a la clé étrangère de la table employe dans ce cas la:
J'espère avoir été clair.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 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 };
Merci d'avance pour le temps passé sur ma question.
Cordialement.
Partager