0

我正在尝试组合一个自定义用户更新页面,以便您可以在一个页面上更新用户的电子邮件、密码和角色。我被角色困住了。我已经列出了角色,但我想在列表框中选择分配给用户的角色。

在这种情况下,每个用户将只有一个角色。

我试过玩弄Roles.GetRolesForUser("userName");没有太多运气。

这是列表框代码:

<asp:ListBox ID="myRoles" runat="server"
     SelectionMode="Single" >
</asp:ListBox>

这是列表框的数据绑定:

rolesArray = Roles.GetAllRoles();
myRoles.DataSource = rolesArray;
myRoles.DataBind();

什么是最容易让它工作的?

4

1 回答 1

1
protected void Page_Load(object sender, EventArgs e)
    {
        var allRoles = new[] {"Admin", "Client", "Super Admin", "Other"};

        //Returns string array
        var rolesByUser = Roles.GetRolesForUser(HttpContext.User.Identity.Name);

        myRoles.DataSource = allRoles;
        myRoles.DataBind();

        foreach (ListItem role in myRoles.Items)
        {
            foreach (var userRole in rolesByUser)
            {
                if (role.Text == userRole)
                    role.Selected = true;
            }
        }
    }

然后在你的html中:

<asp:ListBox ID="myRoles" SelectionMode="Multiple" runat="server"></asp:ListBox>

单角色/单选

将循环更改为:

foreach (ListItem role in myRoles.Items)
        {
            if (role.Text == rolesByUser.FirstOrDefault())
                role.Selected = true;
        }

备择方案

这是使用 LINQ to Objects 的该循环的较短版本:

    foreach (ListItem role in myRoles.Items)
            {
                foreach (var userRole in rolesByUser
                                    .Where(userRole => role.Text == userRole))
                {
                    role.Selected = true;
                }
            }

最后是纯 LINQ 模式,在我看来有点难以阅读:

foreach (ListItem role in from ListItem role in myRoles.Items 
                from userRole in rolesByUser.Where(userRole => role.Text == userRole) 
                select role)
        {
            role.Selected = true;
        }
于 2012-01-25T00:29:11.347 回答