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