具有两个提供程序的ASP.NET成员资格无法使用GetAllUsers方法

时间:2010-02-23 14:30:44

标签: asp.net vb.net asp.net-membership custom-membershipprovider

我正在使用两个会员提供商。当我宣布以下声明时

Dim allUsers As MembershipUserCollection = Membership.Providers("MembershipRoleManager").GetAllUsers

然后,它给了我这个错误信息。

Argument not specified for paramenter 'totalRecords' of 'Public MustOverride Function GetAllUsers(pageIndex as Integer, pageSize as Integer, ByRef totalRecords as Integer) As System.Web.Security.MembershipUserCollection'

然后,我添加了它所要求的内容:

Dim allUsers As MembershipUserCollection = Membership.Providers("MembershipRoleManager").GetAllUsers(1, 50, 100)

我得不到任何回报。我调试了它,allUsers = Nothing。

  1. 上述声明出了什么问题?

  2. 在调用Membership.Providers(“MembershipRoleManager”)时,是否真的需要提供参数.GetAllUsers?

  3. 更新1

    如果,我使用了以下声明:

    Dim allUsers As MembershipUserCollection = Membership.Providers("MembershipRoleManager").GetAllUsers(0, 0, totalUser)
    

    我收到此错误消息:

    The pageSize must be greater than zero.
    Parameter name: pageSize. 
    [ArgumentException: The pageSize must be greater than zero.
    Parameter name: pageSize]
       System.Web.Security.SqlMembershipProvider.GetAllUsers(Int32 pageIndex, Int32 pageSize, Int32& totalRecords) +1848357
    

    但是如果我提供了pageSize参数,它就可以了:

    Dim pageSize As Integer = GetTotalNumberOfUser()
    Dim allUsers As MembershipUserCollection = Membership.Providers("MembershipRoleManager").GetAllUsers(0, pageSize, totalUser)
    

    此语句Dim pageSize As Integer = GetTotalNumberOfUser()返回总计数记录,它已经往返数据库,只是为了得到用户总数,因为我需要提供pageSize参数值。

2 个答案:

答案 0 :(得分:2)

R.E。 #1:totalRecords是一个外部参数。

int totalRecords;
Membership.Providers["xxxx"].GetAllUsers(0, 10, out totalRecords);

VB

Dim totalRecords As Integer
Membership.Providers("xxxx").GetAllUsers(0, 10, totalRecords)

您使用totalRecords获取分页记录计数,例如

R.E。 #2:嗯,不,你不必提供参数值,除非你希望代码以预期的方式运行。大声笑。我肯定不会错过我写作vb的12年。

但是,认真对待。是的,提供参考文件,记录结果。多数民众赞成如何运作。

来自 MSDN

  

GetAllUsers返回的结果   受pageIndex约束   pageSize参数。 pageSize   参数标识最大值   MembershipUser对象的数量   回来了   MembershipUserCollection。该   pageIndex参数标识哪个   要返回的结果页面,其中0   标识第一页。该   totalRecords参数是一个输出   设置为总计的参数   的会员数量   配置的applicationName。对于   例如,如果有13个用户   配置的applicationName和   pageSdex的pageIndex值为1   5,MembershipUserCollection   返回将包含第六个   通过第十个用户返回。   totalRecords将设置为13。

答案 1 :(得分:0)

GetAllUsers(int, int, int)designed to be used to paginate through your users,因此您需要传递您正在开始的结果页面,每页的结果数量,并且它将使用记录总数填充第三个参数:

  

以数据页

获取数据库中所有用户的集合

GetAllUsers()附带following warning

  

将GetAllUsers方法用于非常大的用户数据库时要小心,因为ASP.NET页面中生成的MembershipUserCollection可能会降低应用程序的性能。

但是,在你的问题中,你说你正在使用两个不同的会员提供者 - 你说使用CustomSqlRoleManager不会返回任何用户,而(大概)你会从MembershipRoleManager获得结果。

您是否尝试使用GetAllUsers()调用MembershipRoleManager

目前CustomSqlRoleManager后面的数据库是否可能没有任何用户?有可能CustomSqlRoleManager名称不是很差,根本不处理成员,只有角色吗?