MVC 5 MultiSelectList 选定值不起作用

MVC 5 MultiSelectList Selected Values Not Working

我在显示可能选项的视图中有一个列表框。但是,用户的角色未显示为已选择。在我的 UserViewModel 中,Roles 集合包含完整的角色列表,而 AspNetRoles 集合仅包含用户所属的角色。我尝试了多个 examples/variations,但没有任何内容显示为选中状态。我卡住了。

视图模型:

public class UserViewModel
{
    public string Id { get; set; }

    public string Email { get; set; }

    public ICollection<AspNetRole> Roles { get; set; }

    public virtual ICollection<AspNetRole> AspNetRoles { get; set; }
}

控制器:

    public ActionResult Edit(string id)
    {
        UserViewModel user = new UserViewModel();
        AspNetUser aspNetUser = new AspNetUser();

        if (!string.IsNullOrEmpty(id))
        {
            aspNetUser = db.AspNetUsers.Find(id);
            user.Id = aspNetUser.Id;
            user.Email = aspNetUser.Email;
            user.AspNetRoles = aspNetUser.AspNetRoles;

            var roles = (from r in db.AspNetRoles
                        select r).ToList();
            user.Roles = roles;
        }

        return View(user);
    }

查看:

@Html.ListBox("AspNetRoles",
    new MultiSelectList(Model.Roles, "Id", "Name", 
    Model.AspNetRoles.Select(m => m.Id)))

您还没有发布您的模型,但 属性 AspNetRoles 似乎是一个复杂对象的集合(您不能绑定到一个复杂对象,只能绑定一个值类型 - 或者在ListBox 的情况,值类型的集合)。您可以通过将 AspNetRoles 更改为 int[] 来处理此问题(假设 RoleID 属性 是 int

@Html.ListBoxFor(m => m.AspNetRoles, new SelectList(Model.Roles, "Id", "Name"))

注意,使用强类型助手总是更好。