【问题标题】:MVC 3 Retrieve checkbox values from View, ModelMVC 3 从视图、模型中检索复选框值
【发布时间】:2015-11-29 17:58:31
【问题描述】:

也许(实际上我确定)是我,但我似乎无法弄清楚如何检索列表项作为模型对象的一部分。 here 的帖子似乎让每个人都满意,但在我有限的理解中,这两个答案都不相关。 我需要获取已检查的项目,以便更新 Db。听起来很简单。

我的模特:

    public class UserAdminModel
{
    public Guid UserId { get; set; }
    public string UserName { get; set; }
    public List<UserRole> UserRoles { get; set; }
    public string csvAllRolls { get; set; }
}

public class UserRole
{
    public Guid RoleId { get; set; }
    public string UserRoleName { get; set; }
    public bool UserisinRole  { get; set; }
}

我的观点:

<% using (Html.BeginForm("UpdateRoles", "UserAdmin", FormMethod.Post))
{%>

<input type="hidden" id="UserId" name="UserId" value="<%: Model.UserId %>" />
...

<%  foreach (var role in Model.UserRoles)
    {  %>
<tr>

    <td>&nbsp;</td>
    <td colspan="2" nowrap="nowrap"><%: role.UserRoleName %></td>
    <td>&nbsp;</td>
    <td>
        <input type="checkbox" id="UserRoles" name="UserRoles" value="<%: role.UserRoleName %>"
            <% if (role.UserisinRole) { %>                
             checked="checked"
            <% } %>
             /></td>
</tr>
<%  } %>
...
        <input type="submit" name="Submit" value="Update Roles" /></td>
<%  } %>

我的控制器:

        [HttpPost]
    public ActionResult UpdateAllRoles(UserAdminModel model)
    {
        Guid uid = new Guid( Request["UserId"]);


        return RedirectToAction("Index", "MyController");
    }

UserId 很好,但模型的其余部分为空。任何帮助将不胜感激。

【问题讨论】:

  • 您创建了带有name 属性的复选框,这些属性与您的模型完全没有关系。这样做的目的是为了列出所有可用的角色并能够将它们分配给用户(通过选择复选框)?
  • 是的,我想列出所有角色(带有复选框),预先选择用户已经分配到的角色,然后通过选中或取消选中所需角色让用户进行更新。我目前继承的应用程序让用户分别进入每个角色,一次添加/删除一个用户。我尝试了许多变体来设置与我的模型的关系,但无济于事,这就是我在这里发布的原因。谢谢

标签: entity-framework asp.net-mvc-3


【解决方案1】:

您需要使用for 循环,以便您的表单控件具有正确的名称属性以绑定到您的模型(我会留给您从剃刀转换为 aspx)

@using (Html.BeginForm("UpdateRoles", "UserAdmin", FormMethod.Post))
{
  @Html.HiddenFor(m => m.UserId) // or add this as a route parameter in BeginForm()
  ...
  for(int i = 0; i < Model.UserRoles.Count; i++)
  {
    @Html.HiddenFor(m => m.UserRoles[i].RoleId)
    @Html.CheckBoxFor(m => m.UserRoles[i].UserisinRole)
    @Html.LabelFor(m => m.UserRoles[i].UserisinRole, Model.UserRoles[i].UserRoleName)
  }
  <input type="submit" name="Submit" value="Update Roles" />
}

当您提交表单时,model.UserRoles 将包含所有角色,您可以使用获取所选角色

var selectedRoles = model.UserRoles.Where(r => r.UserisinRole);

旁注:在这里使用&lt;table&gt; 似乎不合适。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2010-11-05
    • 2013-03-20
    • 2012-07-29
    • 2013-09-18
    • 1970-01-01
    • 2011-11-16
    相关资源
    最近更新 更多