ASP.Net成员资格:在列表框中列出角色

ASP.Net成员资格:在列表框中列出角色,asp.net,asp.net-membership,asp.net-roles,Asp.net,Asp.net Membership,Asp.net Roles,我正试图建立一个自定义的用户更新页面,这样你就可以在一个页面上更新用户的电子邮件、密码和角色。我被角色卡住了。我已经列出了角色,但我想在列表框中选择分配给用户的角色 在这种情况下,每个用户只有一个角色 我尝试过使用角色.GetRolesForUser(“用户名”)

我正试图建立一个自定义的用户更新页面,这样你就可以在一个页面上更新用户的电子邮件、密码和角色。我被角色卡住了。我已经列出了角色,但我想在列表框中选择分配给用户的角色

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

我尝试过使用
角色.GetRolesForUser(“用户名”)
以下是列表框代码:

<asp:ListBox ID="myRoles" runat="server"
     SelectionMode="Single" >
</asp:ListBox>
什么是最容易让这个工作

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>
选择 下面是使用LINQ to对象的循环的较短版本:

    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;
        }

你好,尼克,很抱歉回复太慢,谢谢你提供了一个直截了当的答案。我已经尝试让它工作,但我没有任何运气返回用户的角色。在使用
string UserName=Request.QueryString[“UN”].ToString()时,我已将
HttpContext.User.Identity.Name
替换为
Roles.GetRolesForUser(“Current.UserName”)
;MembershipUser Current=myuser[用户名]
从上一页的列表中获取用户名
foreach(rolesByUser中的var userRole)
没有循环。有什么想法吗?我想我知道为什么。用户未登录。但我想突出显示用户列表中选定用户的角色,而不是当前登录的角色。这适用于只有管理员才能访问用户帐户的intranet。有没有办法做到这一点?这解决了尼克:
foreach(在AvailableRoles.Items中的ListItem角色){if(Roles.IsUserInRole(Current.UserName,role.Text)){role.Selected=true;}}
谢谢你的帮助
    foreach (ListItem role in myRoles.Items)
            {
                foreach (var userRole in rolesByUser
                                    .Where(userRole => role.Text == userRole))
                {
                    role.Selected = true;
                }
            }
foreach (ListItem role in from ListItem role in myRoles.Items 
                from userRole in rolesByUser.Where(userRole => role.Text == userRole) 
                select role)
        {
            role.Selected = true;
        }