我只需要一个“已批准”用户列表,但不知道如何解决这个问题。
lstUsersNotInRole.DataSource = Membership.GetAllUsers(); // Get Approved Users Only!?!
lstUsersNotInRole.DataBind();
任何帮助都将受到高度赞赏。
Kardo
答案 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
,复制粘贴相关部分并相应修改。