Членство в ASP.NET с двумя провайдерами не может использовать метод GetAllUsers - PullRequest
1 голос
/ 23 февраля 2010

Я использую двух провайдеров членства. Когда я объявил следующее утверждение

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 = ничего.

  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

Но это работает, если я предоставил параметр размера страницы:

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

Этот параметр Dim pageSize As Integer = GetTotalNumberOfUser () возвращает итоговую подсчитанную запись, это уже круговая поездка в базу данных, просто для получения общего числа пользователей, поскольку мне нужно предоставить значение параметра pageSize.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2010

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: хм, нет, вам не нужно указывать значения параметров, если вы не хотите, чтобы код вел себя ожидаемым образом. лол. я уверен, что не пропустите 12 лет, которые я потратил на написание vb.

серьезно, хотя. да, поставьте параметры, как задокументировано, получите результаты, как задокументировано. вот как это работает.

С MSDN

Результаты, возвращаемые GetAllUsers ограничены pageIndex и Параметры размера страницы. Размер страницы параметр определяет максимум количество объектов MembershipUser для вернуться в MembershipUserCollection. Параметр pageIndex определяет, какой страница результатов для возврата, где 0 идентифицирует первую страницу. Параметр totalRecords является выходным параметр, который установлен на общее количество пользователей членства для настроил applicationName. За Например, если есть 13 пользователей для настроил applicationName, а Значение pageIndex было 1 с размером страницы из 5, MembershipUserCollection вернулся бы содержать шестой через десятый юзер вернулся. totalRecords будет установлен в 13.

0 голосов
/ 09 марта 2010

GetAllUsers(int, int, int) - это , предназначенное для разбивки на страницы ваших пользователей , поэтому вам нужно пропустить страницу результатов, на которой вы начинаете, количество результатов на странице, и оно заполнит третий параметр с общим количеством записей:

Получает коллекцию всех пользователей в базе данных в страницах данных

GetAllUsers() поставляется с следующим предупреждением :

Будьте осторожны при использовании метода GetAllUsers с очень большими пользовательскими базами данных, поскольку результирующая коллекция MembershipUserCollection на вашей странице ASP.NET может ухудшить производительность вашего приложения.

Однако в своем вопросе вы утверждаете, что используете двух разных провайдеров членства - вы говорите, что использование CustomSqlRoleManager не возвращает пользователей, в то время как (предположительно) вы получаете результаты от MembershipRoleManager.

Вы пытались звонить GetAllUsers() с использованием MembershipRoleManager?

Возможно ли, что в базе данных CustomSqlRoleManager нет пользователей в данный момент? Возможно ли, что CustomSqlRoleManager не имеет плохого имени и не имеет отношения к участникам, только роли?

...