代码之家  ›  专栏  ›  技术社区  ›  Kardo

ASP.NET C#(3.5)成员资格,如何仅获得批准的用户?

  •  1
  • Kardo  · 技术社区  · 13 年前

    我只需要一个“已批准”用户的列表,但不知道如何计算。

    lstUsersNotInRole.DataSource = Membership.GetAllUsers(); // Get Approved Users Only!?!
    lstUsersNotInRole.DataBind();
    

    如有任何帮助,我们将不胜感激。

    卡尔多

    3 回复  |  直到 13 年前
        1
  •  5
  •   Andy Refuerzo    13 年前

    您可以使用Linq来实现这一点,而不是深入研究数据库并更改/创建存储过程(而且由于您没有指定要使用的数据库)。试试这个:

    Membership.GetAllUsers().Cast<MembershipUser>().Where(u => u.IsApproved == true).ToList();
    
        2
  •  0
  •   Haris    13 年前

    您需要在存储过程中筛选已批准的用户,并将结果返回到应用程序。

    CREATE PROCEDURE dbo.Membership_GetActiveUsersInRoles
    
        @RoleName nvarchar(256)
    
    AS
    
        BEGIN
    
            DECLARE @RoleId uniqueidentifier
    
            SELECT @RoleId = RoleId
            FROM dbo.aspnet_Roles
            WHERE LOWER(@RoleName) = LoweredRoleName
    
            SELECT u.UserName, u.UserId
            FROM dbo.aspnet_Users u, dbo.aspnet_UsersInRoles ur, dbo.aspnet_Membership m
            WHERE
            u.UserId = m.UserId AND
            u.UserId = ur.UserId AND
            @RoleId = ur.RoleId and
            m.IsApproved = 'true'
             -- You can also specify m.IsLockedOut = 'false' for other purposes
    
    END
    
        3
  •  0
  •   Tim Schmelter    13 年前

    如果您使用 SqlMembershipProvider ,您可以手动选择它们,也可以作为纯sql语句(例如,通过 ADO.NET )或者通过创建也支持分页和 ApplicationId 以及可以参数化的位置 IsApproved .

    SELECT  m.IsApproved, u.UserName, 
            m.Email, m.PasswordQuestion, m.Comment, 
            m.CreateDate, m.LastLoginDate, u.LastActivityDate,
            m.LastPasswordChangedDate, u.UserId, 
            m.IsLockedOut, m.LastLockoutDate
    FROM   dbo.aspnet_Membership m, dbo.aspnet_Users u
    WHERE  u.UserId = m.UserId 
    AND    m.IsApproved = @IsApproved
    ORDER BY u.UserName
    

    看看就知道了 dbo.aspnet_Membership_GetAllUsers ,复制粘贴相关部分并对其进行相应修改。

    推荐文章