Членство в ASP.Net: список ролей в списке - PullRequest
0 голосов
/ 25 января 2012

Я пытаюсь собрать пользовательскую страницу обновления пользователя, чтобы вы могли обновить электронную почту, пароль и роль пользователя на одной странице. Я застрял на ролях. Я перечислил роли хорошо, но я хочу выбрать роль, назначенную пользователю в списке.

В этом случае у каждого пользователя будет только одна роль.

Я попытался поиграть с Roles.GetRolesForUser("userName"); без особой удачи.

Вот код списка:

<asp:ListBox ID="myRoles" runat="server"
     SelectionMode="Single" >
</asp:ListBox>

А вот привязка данных для списка:

rolesArray = Roles.GetAllRoles();
myRoles.DataSource = rolesArray;
myRoles.DataBind();

Что проще всего заставить это работать?

1 Ответ

1 голос
/ 25 января 2012
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;
        }
...