我有一个具有一对多关系的数据库,我很难在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中使用此设计处理表单的正确方法是什么?
答案 0 :(得分:1)
您需要在复选框输入元素中添加“name”属性 - 否则它们不会显示在FormCollection中。