Mettre à jour le Model en utilisant des propriétés de navigation
Bonjour,
Je vous explique mon problème. J'ai 2 entités ( Instructor et OfficeAssignement) .
Code:
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
|
public class OfficeAssignement
{
[Key]
[ForeignKey("Instructor")]
public int InstructorID { get; set; }
public string Location { get; set; }
public virtual Instructor Instructor { get; set; }
}
public class Instructor
{
[Display(Name = "Full Name")]
public string FullName
{
get { return FirstName + " " + LastName; }
}
[Key]
public int InstructorID { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
[Display(Name = "Date of hire")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0: yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime HireDate { get; set; }
public ICollection<Course> Courses { get; set; }
public OfficeAssignement OfficeAssignement { get; set;}
public ICollection<Department> Departments { get; set; }
} |
Ce que je veux c'est pouvoir lister tous les éléments de la classe Instructor avec la location. Cela marche parfaitement en utilisant la propriété de navigation OfficeAssignement grâce à laquelle je récupère la Location.
Dans la vue de l'instructor, je mets :
Code:
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
|
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.OfficeAssignement.Location)
</th>
<th>
@Html.DisplayNameFor(model => model.FullName)
</th>
<th>
@Html.DisplayNameFor(model => model.HireDate)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.OfficeAssignement.Location)
</td>
<td>
@Html.DisplayFor(modelItem => item.FullName)
</td>
<td>
@Html.DisplayFor(modelItem => item.HireDate)
</td> |
En revanche : quand je veux éditer, rien ne se passe. En effet, j'ai toujours eu l'habitude d'utiliser des clés étrangères ( grâce à par exemple une locationID qui aurait pu se trouver dans l'entité Instructor).
Donc j'arrive bien à récupérer les données mais pas à mettre à jour.
Voici mon code pour l'instant dans l'action Edit du controler Instructor:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include="InstructorID,LastName,FirstName,HireDate")] Instructor instructor)
{
if (ModelState.IsValid)
{
db.Entry(instructor).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.InstructorID = new SelectList(db.OfficeAssignements, "InstructorID", "Location", instructor.InstructorID);
return View(instructor);
} |
Voici pour l'instant mon code dans la vue Edit :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
<div class="form-group">
@Html.LabelFor(model => model.FirstName, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.FirstName)
@Html.ValidationMessageFor(model => model.FirstName)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.HireDate, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.HireDate)
@Html.ValidationMessageFor(model => model.HireDate)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.OfficeAssignement, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.OfficeAssignement)
@Html.ValidationMessageFor(model => model.OfficeAssignement)
</div>
</div> |
Est-ce que je suis obligé de créer une clé étrangère ( par ex locationId au sein de l'entité Instructor) ?
Ou alors est-il possible de tout faire avec une propriété de navigation ?
Merci beaucoup pour votre aide