我在视图中有一个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)))
答案 0 :(得分:1)
您尚未发布模型,但似乎属性AspNetRoles
是复杂对象的集合(您不能绑定到复杂对象,只能绑定值类型 - 或者在ListBox的情况下,是集合价值类型)。您可以通过将AspNetRoles
更改为int[]
来处理此问题(假设ID
的{{1}}属性为Role
)
int
注意,使用强类型助手总是更好。