1

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

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

任何帮助将不胜感激。

卡多

4

3 回答 3

5

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

Membership.GetAllUsers().Cast<MembershipUser>().Where(u => u.IsApproved == true).ToList();
于 2013-03-11T09:18:10.720 回答
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
于 2013-03-11T08:53:17.380 回答
0

如果您使用SqlMembershipProvider,您可以手动选择它们,可以是普通的 sql 语句(例如 via 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,复制粘贴相关部分并进行相应修改。

于 2013-03-11T08:54:07.383 回答