具有动态CheckBox数量的ASP.NET MVC模型

时间:2011-01-29 23:59:06

标签: asp.net-mvc-2 c#-4.0 viewmodel

我有一个具有一对多关系的数据库,我很难在ASP.NET MVC中进行建模。为简单起见,假设表A代表办公楼,表B代表员工,表C创建员工与建筑物之间的一对多关系,以指示哪些员工可以访问特定建筑物。

Employee
EmployeeId - int
FirstName - string
LastName - string

Office
OfficeId - int
Location - string

EmployeeOffice
EmployeeId - int
OfficeId - int

当新员工加入时,我想将他们分配到他们能够访问的任何办公楼。为此,UI调用每个办公楼的复选框。选中复选框即可授予用户访问相关办公楼的权限。

[ ] - 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 个答案:

答案 0 :(得分:1)

您需要在复选框输入元素中添加“name”属性 - 否则它们不会显示在FormCollection中。