【问题标题】:ASP.NET MVC Model With Dynamic Number of CheckBoxes具有动态复选框数量的 ASP.NET MVC 模型
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 我正式需要休息一下!我不敢相信我错过了。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    相关资源
    最近更新 更多