首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为用户角色创建DropDownLists

为用户角色创建DropDownLists
EN

Stack Overflow用户
提问于 2015-09-12 18:58:19
回答 1查看 3.7K关注 0票数 1

我想要实现的

如果用户是3个角色的成员,我希望生成所有角色的3个DropDownLists以及要选择的每个用户角色。我不想使用ViewBag。

问题

目前,我可以生成包含所有角色的3个DropDownLists,但是没有选择用户所属的3个角色。如果用户是Admin、PowerUser和Manager角色的成员,则在所有3个DropDownLists中只选择最后一个角色Manager。

发问

如何使用正确选择的角色生成所需的DropDownLists?

维奥莫德尔

代码语言:javascript
复制
public class UserViewModel
{
    public IEnumerable<SelectListItem> RolesList { get; set; }
    public string RolesListId { get; set; }
}

控制器

代码语言:javascript
复制
// 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),
};

视图

代码语言:javascript
复制
@for (int i = 0; i < Model.RolesList.Where(x => x.Selected == true).Count(); i++)
{
    @Html.DropDownListFor(model => model.RolesListId, Model.RolesList, "Select Role ...")
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-12 20:05:54

下面是您需要的代码,但是当用户可以有多个角色时,而不是使用DropDownList,最好使用CheckBoxes列表。

  • 用户和角色之间存在一种(n到n)关系,而下拉列表不能表示这种关系。
  • 如果您使用的不仅仅是下拉列表,用户可以从list1中选择role1,从list2中再次选择role1,从列表3中再次选择role1 1。
  • 如果使用下拉列表,最终用户如何向用户添加角色?

无论如何,下面是使用DropDownList 所需的代码

代码语言:javascript
复制
@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,和下面的代码应该是

代码语言:javascript
复制
@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" })
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32542572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档