MVC选择列表中的选定项目为空

时间:2014-09-12 09:38:07

标签: asp.net-mvc entity-framework

我有以下型号 -

public class RoleModel
{
    public int Id { get; set; }
    public string RoleName { get; set; }

    public virtual IEnumerable<UserModel> Users { get; set; }
    public virtual IEnumerable<UserModel> SelectedUsers { get; set; }

    public RoleModel()
    {

    }
}

用户IEnumerable是当前分配给所选角色的用户列表。加载视图时,会正确填充。

当我在视图中按Save时,SelectedUsers IEnumerable和Users IEnumerable为null,这意味着我无法取消分配所有用户并将所选用户重新分配给该角色。

按Save时IEnumerables为空的任何想法?

Screenshot showing null IEnumerables

查看

@Html.ListBoxFor(model => model.SelectedUsers, new SelectList(Model.Users, "Id", "SurnameFirstName"))

控制器

[Authorize]
    [HttpGet]
    public ActionResult Details(int id = 0)
    {
        RoleModel role = _roleService.GetById(id);

        if (role == null)
        {
            return HttpNotFound();
        }
        return View(role);
    }

    [HttpPost]
    public ActionResult Details(RoleModel model)
    {
        if (ModelState.IsValid)
        {
            _roleService.ReassignRights(model);
            _roleService.ReassignUsers(model);
            _roleService.Update(model);

            return RedirectToAction("Index");
        }

        return View(model);
    }

在RoleService.cs中重新分配用户方法

public void ReassignUsers(RoleModel role)
    {
        var roleDal = _roleRepository.FindById(role.Id);

        //_roleRepository.ClearUsersForRole(role.Id);

        foreach (var user in role.SelectedUsers)
        {

        }
    }

1 个答案:

答案 0 :(得分:1)

尝试将UserModel的类型替换为UserModel PK的类型。如果UserModel::Idint,则更改SelectedUsers,如下所示。

public virtual IEnumerable<int> SelectedUsers { get; set; }

虽然Users属性仍然为null,因为没有与Users相关的输入,但它只是用于在ListBoxFor中呈现html选项。您需要在提交时再次设置该值。

DEMO