1

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

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 时我真的必须提供参数吗?

更新 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 参数值。

4

2 回答 2

2

re #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获取分页的记录计数,例如

重新 #2:嗯,不,您不必提供参数值,除非您希望代码以预期的方式运行。哈哈。我当然不会错过我写 vb 的 12 年。

不过,说真的。是的,提供记录的参数,得到记录的结果。这就是它的工作原理。

来自MSDN

GetAllUsers 返回的结果受 pageIndex 和 pageSize 参数的约束。pageSize 参数标识要在 MembershipUserCollection 中返回的 MembershipUser 对象的最大数量。pageIndex 参数标识要返回哪一页结果,其中 0 标识第一页。totalRecords 参数是一个 out 参数,设置为配置的 applicationName 的成员用户总数。例如,如果配置的 applicationName 有 13 个用户,并且 pageIndex 值为 1,pageSize 为 5,则返回的 MembershipUserCollection 将包含返回的第六个到第十个用户。totalRecords 将设置为 13。

于 2010-02-24T19:08:36.997 回答
0

GetAllUsers(int, int, int)旨在用于通过您的 users 进行分页,因此您需要传递您开始的结果页面,每页的结果数,它将用记录总数填充第三个参数:

以数据页的形式获取数据库中所有用户的集合

GetAllUsers()带有以下警告

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

但是,在您的问题中,您声明您正在使用两个不同的会员资格提供商 - 您说 usingCustomSqlRoleManager不会返回任何用户,而(大概)您正在从MembershipRoleManager.

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

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

于 2010-03-09T08:41:23.540 回答