MVC 3从View,Model

时间:2015-09-03 18:58:00

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

也许(实际上我确定)这是我,但我似乎无法弄清楚如何检索列表项作为模型对象的一部分。帖子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很好,但模型的其余部分为空。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您需要使用for循环,以便您的表单控件具有正确的名称属性以绑定到您的模型(我将留给您将其从razor转换为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);

旁注:此处使用<table>似乎不合适。