【发布时间】:2011-03-04 17:25:43
【问题描述】:
我有一个具有一对多关系的数据库,我很难在 ASP.NET MVC 中建模。为简单起见,假设表 A 代表办公楼,表 B 代表员工,表 C 在员工和建筑物之间创建一对多关系,以指示哪些员工可以访问特定建筑物。
员工 EmployeeId - 整数 名字 - 字符串 姓氏 - 字符串 办公室 OfficeId - 整数 位置 - 字符串 员工办公室 EmployeeId - 整数 OfficeId - 整数
当新员工加入时,我想将他们分配到他们可以访问的任何办公楼。为此,UI 需要为每个单独的办公楼设置复选框。选中这些框将授予用户访问相关办公楼的权限。
[ ] - 办公室 1 [ ] - 办公室 2 [ ] - 办公室 3 [ ] - 办公室 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 中使用这种设计处理表单的正确方法是什么?
【问题讨论】:
标签: asp.net-mvc-2 c#-4.0 viewmodel