簡體   English   中英

使用Sql Membership Provider顯示成員信息,包括角色

[英]Displaying Member info including Roles using Sql Membership Provider

我希望根據SqlMembershipProvider模式使用數據庫表設置來創建所有用戶的摘要表。 到目前為止,我有:

<asp:GridView ID="UserAccounts" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField DataField="UserName" HeaderText="UserName" />
        <asp:BoundField DataField="Email" HeaderText="Email" />
        <asp:TemplateField HeaderText="Role">
            <ItemTemplate>
                <asp:TextBox ID="RoleText" ReadOnly="true" runat="server">
                </asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

表和代碼背后:

UserAccounts.DataSource = Membership.GetAllUsers();
UserAccounts.DataBind();

生成用戶列表。 但是,就像您熟悉SQLmembershipprovider的人一樣,與用戶關聯的角色位於多個單獨的表中。 因此,我不確定如何檢索該信息並將其顯示在每個用戶旁邊。

我目前正在考慮的解決方案是以某種方式逐行遍歷表,然后對該用戶名調用Roles.GetRolesForUser()以檢索信息,然后將其綁定到表。 但是,我不確定到底該怎么做,甚至不是最有效的方法。

您可以通過DataTable使用此方法

public DataSet CustomGetAllUsers()    {
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        dt = ds.Tables.Add("Users");

        MembershipUserCollection muc;
        muc = Membership.GetAllUsers();

        dt.Columns.Add("UserName", Type.GetType("System.String"));
        dt.Columns.Add("Email", Type.GetType("System.String"));
        dt.Columns.Add("CreationDate", Type.GetType("System.DateTime"));

        /* Here is the list of columns returned of the Membership.GetAllUsers() method
         * UserName, Email, PasswordQuestion, Comment, IsApproved
         * IsLockedOut, LastLockoutDate, CreationDate, LastLoginDate
         * LastActivityDate, LastPasswordChangedDate, IsOnline, ProviderName
         */

        foreach(MembershipUser mu in muc) {
            DataRow dr;
            dr = dt.NewRow();
            dr["UserName"] = mu.UserName;
            dr["Email"] = mu.Email;
            dr["CreationDate"] = mu.CreationDate;
            dt.Rows.Add(dr);
        }
        return ds;
    }

綁定:

UserAccounts.DataSource = CustomGetAllUsers().Tables[0] ;
UserAccounts.DataBind();

您還可以使用Eval.DataBinder修改ItemTemplate

嘗試綁定到

    var userRoles = from MembershipUser user in Membership.GetAllUsers()
                    from role in Roles.GetRolesForUser(user.UserName)
                    select new { 
                        UserName = user.UserName, Email = user.Email, Role = role };

要么

    var userRoles = from MembershipUser user in Membership.GetAllUsers()
                    let roles = Roles.GetRolesForUser(user.UserName)
                    select new {
                        UserName = user.UserName, 
                        Email = user.Email,
                        Roles = string.Join(", ",  roles) };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM