Я использую ASP.NET MVC и ADO.NET Entity Framework вместе.
Я хочу, чтобы мои представления и контроллеры были строго типизированы.
Но как я должен обрабатывать ассоциации сущностей?
Вот простой пример:
У человека есть один отдел. Департамент имеет ноль или более людей.
Мой контроллер передает экземпляр объекта Person и коллекцию всех объектов отдела в представление.
public class PersonController : Controller
{
...
//
// GET: /Person/Create
public ActionResult Create()
{
Person Model = new Person();
Model.Id = Guid.NewGuid();
ViewData["Departments"] = db.Department;
return View(Model);
}
...
}
В My View есть "Департамент" DropDownList со всеми отделами в качестве параметров.
<% using (Html.BeginForm()) {%>
<fieldset>
<legend>Fields</legend>
<p>
<label for="Id">Id:</label>
<%= Html.TextBox("Id") %>
<%= Html.ValidationMessage("Id", "*") %>
</p>
<p>
<label for="Name">Name:</label>
<%= Html.TextBox("Name") %>
<%= Html.ValidationMessage("Name", "*") %>
</p>
<p>
<label for="Department">Family:</label>
<%= Html.DropDownList("Department", new SelectList((IEnumerable)ViewData["Departments"], "Id", "Name"))%>
<%= Html.ValidationMessage("Department", "*")%>
</p>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% } %>
Но объект Person, отправленный в контроллер, имеет no Department и не работает!
public class PersonController : Controller
{
...
//
// POST: /Person/Create
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Person Model)
{
try
{
db.AddToPerson(Model);
db.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
...
}
Почему выбранный отдел из DropDownList "Департамент" автоматически добавлен в модель Person?
Как использовать ADO.NET Entity Framework и ASP.NET MVC с сильно типизированными представлениями и контроллерами?