0

カスタムユーザー更新ページをまとめて、ユーザーの電子メール、パスワード、および役割をすべて1つのページで更新できるようにしようとしています。私は役割に固執しています。役割を正常にリストしましたが、リストボックスでユーザーに割り当てられた役割を選択したいと思います。

この場合、各ユーザーには1つの役割しかありません。

Roles.GetRolesForUser("userName");運が悪かったので遊んでみました。

リストボックスのコードは次のとおりです。

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

リストボックスのデータバインディングは次のとおりです。

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

これを機能させる最も簡単な方法は何ですか?

4

1 に答える 1

1
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;
        }
于 2012-01-25T00:29:11.347 に答える