MVC 5 MultiSelectList选择的值不起作用

时间:2015-01-21 01:16:05

标签: c# asp.net-mvc

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

视图模型:

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)))

1 个答案:

答案 0 :(得分:1)

您尚未发布模型,但似乎属性AspNetRoles是复杂对象的集合(您不能绑定到复杂对象,只能绑定值类型 - 或者在ListBox的情况下,是集合价值类型)。您可以通过将AspNetRoles更改为int[]来处理此问题(假设ID的{​​{1}}属性为Role

int

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