【发布时间】:2015-12-09 03:25:25
【问题描述】:
我想要达到的目标
如果用户是 3 个角色的成员,我想生成所有角色的 3 个 DropDownLists 以及要选择的每个用户角色。我不想使用 ViewBag。
问题
目前,我可以生成 3 个包含所有角色的 DropDownLists,但未选择用户所属的 3 个角色。如果用户是 Admin、PowerUser 和 Manager 角色的成员,则在所有 3 个 DropDownLists 中只选择最后一个角色 Manager。
问题
如何使用正确选择的角色生成所需的 DropDownLists?
视图模型
public class UserViewModel
{
public IEnumerable<SelectListItem> RolesList { get; set; }
public string RolesListId { get; set; }
}
控制器
// Get list of roles that user is a member of
var userRoles = UserManager.GetRoles(user.Id);
var model = new UserViewModel()
{
RolesList = RoleManager.Roles.ToList().Select(r => new SelectListItem
{
Selected = userRoles.Contains(r.Name),
Text = r.Name,
Value = r.Name
}).OrderBy(r => r.Text),
};
查看
@for (int i = 0; i < Model.RolesList.Where(x => x.Selected == true).Count(); i++)
{
@Html.DropDownListFor(model => model.RolesListId, Model.RolesList, "Select Role ...")
}
【问题讨论】:
-
RoleListId 包含单个 id?
-
RoleListId 包含单个 id - 是
-
所选选项将是
RolesListId的值(因为您绑定到RolesListId)。并且在绑定到属性时忽略设置SelectListItem的Selected属性。但是RolesListId是一个值类型 (string)`,所以无论如何你都不能将多个下拉列表绑定到它,所以不清楚你想要实现什么。 -
我怀疑你想要的属性
RolesListId是List<string>并且你想要一个@Html.ListBoxFor(m => m.RolesListId, Model.RolesList)它将显示所有角色,如果RolesListId包含 3 个值,那么这 3 个选项将被选中。 -
您接受的解决方案意味着您只能拥有 3 个角色。您不能添加新角色。您不能删除角色。您不能进行客户端或服务器端验证。您可以多次选择相同的角色。每个角色都需要一个
<select multiple="multiple>(即ListBoxFor())或复选框。
标签: c# model-view-controller asp.net-mvc-5 html.dropdownlistfor asp.net-mvc-viewmodel