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

时间:2013-03-11 08:42:50

标签: asp.net filter membership

我只需要一个“已批准”用户列表,但不知道如何解决这个问题。

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

任何帮助都将受到高度赞赏。

Kardo

3 个答案:

答案 0 :(得分:5)

您可以使用Linq来完成此操作,而不是深入研究数据库并更改/创建存储过程(并且因为您没有指定要使用的数据库)。试试这个:

Membership.GetAllUsers().Cast<MembershipUser>().Where(u => u.IsApproved == true).ToList();

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果您使用SqlMembershipProvider,您可以手动选择它们,可以是普通的sql语句(例如通过ADO.NET),也可以创建一个也支持分页的自定义存储过程和{{ 1}}以及您可以在哪里参数化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 ,复制粘贴相关部分并相应修改。