为用户角色创建下拉列表
Create DropDownLists for User Roles
我正在努力实现什么
如果一个用户是 3 个角色的成员,我想生成 3 个所有角色的 DropDownLists 和每个要选择的用户角色。我不想使用 ViewBag。
问题
目前,我可以生成 3 个包含所有角色的 DropDownList,但未选择用户所属的 3 个角色。如果用户是 Admin、PowerUser 和 Manager 角色的成员,则在所有 3 个 DropDownLists 中只选择最后一个角色 Manager。
问题
如何使用正确选择的角色生成所需的下拉列表?
视图模型
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 ...")
}
这是您需要的代码,但是当用户可以拥有多个角色时,最好使用 CheckBoxes
.
列表而不是使用 DropDownList
- 用户和角色之间存在(n 到 n)关系,而 dropdownliast 永远不能表示这种关系。
- 如果您使用的不仅仅是下拉列表,用户可以 select 列表 1 中的角色 1 和列表 2 中的角色 1 以及列表 3 中的角色 1。
- 如果您使用下拉列表,最终用户如何向用户添加角色?
无论如何,这是您需要的代码 DropDownList:
@foreach (var item in Model.RolesList.Where(x => x.Selected))
{
@Html.DropDownList("SelectedRole", new SelectList(Model.RolesList, "Value", "Text", item.Value), "Select a Role")
}
这里是如果您决定使用 CheckBoxes:
时应该使用的代码
@foreach (var item in (SelectList)ViewBag.RoleId)
{
<input type="checkbox" name="SelectedRoles" value="@item.Value" class="checkbox-inline" />
@Html.Label(item.Value, new { @class = "control-label" })
}
我正在努力实现什么
如果一个用户是 3 个角色的成员,我想生成 3 个所有角色的 DropDownLists 和每个要选择的用户角色。我不想使用 ViewBag。
问题
目前,我可以生成 3 个包含所有角色的 DropDownList,但未选择用户所属的 3 个角色。如果用户是 Admin、PowerUser 和 Manager 角色的成员,则在所有 3 个 DropDownLists 中只选择最后一个角色 Manager。
问题
如何使用正确选择的角色生成所需的下拉列表?
视图模型
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 ...")
}
这是您需要的代码,但是当用户可以拥有多个角色时,最好使用 CheckBoxes
.
DropDownList
- 用户和角色之间存在(n 到 n)关系,而 dropdownliast 永远不能表示这种关系。
- 如果您使用的不仅仅是下拉列表,用户可以 select 列表 1 中的角色 1 和列表 2 中的角色 1 以及列表 3 中的角色 1。
- 如果您使用下拉列表,最终用户如何向用户添加角色?
无论如何,这是您需要的代码 DropDownList:
@foreach (var item in Model.RolesList.Where(x => x.Selected))
{
@Html.DropDownList("SelectedRole", new SelectList(Model.RolesList, "Value", "Text", item.Value), "Select a Role")
}
这里是如果您决定使用 CheckBoxes:
时应该使用的代码@foreach (var item in (SelectList)ViewBag.RoleId)
{
<input type="checkbox" name="SelectedRoles" value="@item.Value" class="checkbox-inline" />
@Html.Label(item.Value, new { @class = "control-label" })
}