Bonjour tout le monde.
J'essaye d'appliquer le pattern viewmodel sur une de mes actions pour pouvoir afficher le secteur d'une activité sous forme de dropdownlist,tout marche bien mon problème vient quand l'utilisateur ne saisie pas le libelle chose que je gère normalement en utilisant ModelState.AddModelError.
Voici mes sources,Le controlleur
le ViewModel:
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 public ActionResult Edit(int id) { Activite activite = act.GetActivite(id); return View(new ActiviteViewModel(activite)); } // // POST: /Activites/Edit/5 [AcceptVerbs(HttpVerbs.Post)] public ActionResult Edit(int id, FormCollection collection) { Activite editActivite = act.GetActivite(id); try { editActivite.libelle = Request.Form["libelle"]; string secteur = Request.Form["Secteur_code"]; SecteurDAO sec = new SecteurDAO(); Secteur sect = sec.getIDSecteur(secteur); editActivite.Secteur_code = sect.code; act.Save(); return RedirectToAction("Details", new { id = editActivite.code }); } catch { foreach (var issue in editActivite.GetRuleViolations()) { ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage); } return View(new ActiviteViewModel(editActivite)); } }
et enfin ma page aspx:
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 using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using PFAEnvironnement.DAO; using System.Web.Mvc; using System.Collections; namespace PFAEnvironnement.Models { public class ActiviteViewModel { // Properties private Activite activite; private SelectList secteurs; public Activite Activite { get { return this.activite; } } public SelectList Secteurs { get { return this.secteurs; } } // Constructor public ActiviteViewModel(Activite act) { activite = act; ISecteurDAO secteur =new SecteurDAO(); secteurs = new SelectList(secteur.lstSecteurs(), act.Secteur.libelle); } public ActiviteViewModel() { ISecteurDAO secteur = new SecteurDAO(); secteurs = new SelectList(secteur.lstSecteurs()); } } }
Le problème est que je catch l'exception dans le bloc catch et dans la variable issue j'ai mon problème et le message adéquat pour l'erreur que j'ai définit dans ma classe qui gère les erreurs le problème c'est quand je renvoie vers la vue et exactement quand il veut afficher le libelle il me sort l'erreur:
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 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<PFAEnvironnement.Models.ActiviteViewModel>" %> <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> Edit </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <h2>Edit</h2> <%= Html.ValidationSummary("Edit was unsuccessful. Please correct the errors and try again.") %> <% using (Html.BeginForm()) {%> <fieldset> <legend>Fields</legend> <p> <label for="Secteur_code">Secteur_code:</label> <%= Html.DropDownList("Secteur_code", Model.Secteurs) %> <%= Html.ValidationMessage("Secteur_code", "*") %> </p> <p> <label for="libelle">libelle:</label> <%= Html.TextBox("libelle", Model.Activite.libelle) %> <%= Html.ValidationMessage("libelle", "*") %> </p> <p> <input type="submit" value="Save" /> </p> </fieldset> <% } %> <div> <%=Html.ActionLink("Back to List", "Index") %> </div> </asp:Content>
au niveau de le ligne 24 qui est la suivante:[NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.]
Merci d'avance pour vos reponses.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Ligne 22 : <p> Ligne 23 : <label for="libelle">libelle:</label> Ligne 24 : <%= Html.TextBox("libelle", Model.Activite.libelle) %> Ligne 25 : <%= Html.ValidationMessage("libelle", "*") %> Ligne 26 : </p>
Partager