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