Модель ASP.NET MVC с динамическим числом флажков - PullRequest
0 голосов
/ 30 января 2011

У меня есть база данных с отношением один-ко-многим, что мне сложно моделировать в 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?

1 Ответ

1 голос
/ 30 января 2011

Вам необходимо добавить атрибут name в элементы ввода вашего флажка, иначе они не будут отображаться в FormCollection.

...