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