Bonjour à tous,
Aujourd'hui j'ai attaqué le rendu de mon appli web MVC3 avec Razor, mon modèle me semble un peu branlant mais bon, ça marche. Donc j'ai une question simple, j'ai ma vue fortement typée qui prend un objet Demande. Cette objet est une instance de :
Donc je propose l'édition de cette demande, donc j'utilise les @Html.EditorFor(model => model.Titre) par exemple. Si j'ai bien compris, cela envoi juste le model au controller (en l'occurence, ici ma demande) donc pas de probleme quand il s'agit de recuperer des données de la table Demande. Mais dans ce modèle, j'ai aussi un Responsable et un Vendeur. Je souhaite modifier le nom du responsable, j'ai naturellement fais ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public class Demande { public int DemandeId { get; set; } public string Titre { get; set; } ... public int VendeurID { get; set; } public int? ResponsableID { get; set; } public virtual Vendeur Vendeur { get; set; } public virtual Responsable Responsable { get; set; } }
Donc en théorie, je pensais recuperer le nom du responsable. Mais dans mon controller, j'ai:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 @Html.EditorFor(model => model.Responsable.Nom)
J'ai bidouillé un peu , mais au debut, je pensais naivement que le framework allait m'updater les tables en cascade(...enfin qu'il allait me mettre a jour tout seul le Demande.Responsable.Nom,ce qui revient à modifier dans la table Responsable la ligne d'ID egale à celle présente dans la demande.). Or il me jette avec 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 [HttpPost] public ActionResult Accepter(Demande demandeModifiee) { //on recupere le responsable et on change son nom, le cas échéant Responsable responsable =db.Responsables.Find(demandeModifiee.ResponsableID); responsable.Nom = demandeModifiee.Responsable.Nom; db.Entry(responsable).State = EntityState.Modified; //on recupere le vendeur Vendeur vendeur = db.Vendeurs.Find(demandeModifiee.VendeurID); demandeModifiee.Vendeur = vendeur; //changement de l'etat à "pris en charge" demandeModifiee.EtatValue = 1; db.Entry(demandeModifiee).State = EntityState.Modified; db.SaveChanges(); ViewBag.responsable = demandeModifiee.Responsable.Nom; ViewBag.acceptation = true; return View(demandeModifiee); }
Peut etre me manque t'il une relation dans ma base?{"Object reference not set to an instance of an object."}
Donc j'avais mis en champs caché les ID des responsables et vendeurs pour ensuite récupérer les 2 objets dans le controller avec la method find() et les remettre dans ma demande. Mais j'aurais forcement à un moment besoin de modifier les objets vendeurs et responsables. Donc je me demandais comment faire, enlever le type de la vue? Sinon j'avais pensé récupérer un champ quelconque de type string qui contiendrait le nouveau nom mais je ne sais pas comment passer un champ qui n'appartient pas à l'objet Demande depuis la vue vers le controller.
Merci d'eclairer mes lumieres sur le passage de parametre dans razor,
Bonne journée
Partager