У меня есть база данных с отношением один-ко-многим, что мне сложно моделировать в ASP.NET MVC. Для простоты, скажем, таблица A представляет офисные здания, таблица B представляет сотрудников, а таблица C создает отношение «один ко многим» между сотрудниками и зданиями, чтобы указать, какие сотрудники имеют доступ к конкретному зданию.
<strong>Employee</strong>
EmployeeId - int
FirstName - string
LastName - string
<strong>Office</strong>
OfficeId - int
Location - string
<strong>EmployeeOffice</strong>
EmployeeId - int
OfficeId - int
Когда на борт появятся новые сотрудники, я бы хотел назначить их в любые офисные здания, к которым они могли бы получить доступ. Для этого пользовательский интерфейс вызывает флажки для каждого отдельного офисного здания. Установка флажков предоставляет пользователю доступ к соответствующему офисному зданию.
[ ] - Office 1
[ ] - Office 2
[ ] - Office 3
[ ] - Office 4
Меня беспокоит то, что офисы должны быть динамичными. Другими словами, офис (или офисы) могут приходить или уходить в любое время.
Модель на самом деле сложнее, чем я изобразил. Таким образом, у меня есть CreateEmployeeViewModel, который содержит свойства (с аннотациями) следующим образом:
public class CreateEmployeeViewModel
{
public string FirstName
{
get;
set;
}
public string LastName
{
get;
set;
}
public IDictionary Offices
{
get;
private set;
}
public CreateEmployeeViewModel(IDictionary offices)
{
Offices = offices;
}
}
Мой взгляд похож на следующий
<div>
<%: Html.LabelFor(model => model.FirstName) %>
</div>
<div>
<%: Html.TextBoxFor(model => model.FirstName) %>
<%: Html.ValidationMessageFor(model => model.FirstName) %>
</div>
<div>
<%: Html.LabelFor(model => model.LastName) %>
</div>
<div>
<%: Html.TextBoxFor(model => model.LastName) %>
<%: Html.ValidationMessageFor(model => model.LastName) %>
</div>
<!-- This is really ugly, so I welcome any suggested updates -->
<% foreach (KeyValuePair<int, string> office in Model.Offices) { %>
<label for="Office<%: office.Key %>"><%: office.Value %></label>
<input id="Office<%: office.Key %>" type="checkbox" value="<%: office.Key %>" />
<% } %>
Когда я нажимаю кнопку отправки формы, я ожидаю получить обратно строго типизированную модель представления, в дополнение к флажкам, чтобы я знал, в какие офисы назначать пользователей. Я создал свой метод действия следующим образом:
public ActionResult Create(CreateUserViewModel user, FormCollection collection)
Причина дополнительного объекта FormCollection в том, что я надеялся Я мог бы получить значения формы в дополнение к значениям, найденным в модели представления (например, флажки). К сожалению, однако, коллекция содержит только информацию для свойств, найденных в моей модели представления.
Как правильно обрабатывать формы с этим дизайном в ASP.NET MVC 2.0?