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