Question

J'utilise deux fournisseurs d'appartenances. Quand je déclarais une déclaration suivante

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

Alors, il m'a donné ce message d'erreur.

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'

Alors, j'ai ajouté ce qu'il a demandé comme ceci:

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

Je ne reçois rien en retour. Je débogués et ALLUSERS = Nothing.

  1. Qu'est-ce qui ne va pas la déclaration ci-dessus?

  2. Dois-je vraiment au fournisseur les paramenters lorsque vous appelez GetAllUsers Membership.Providers ( "MembershipRoleManager").?

Mise à jour 1

Si, je l'énoncé ci-dessous:

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

J'ai reçu ce message d'erreur:

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

Mais cela fonctionne si je provied le pageSize param:

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

statment Dim pageSize As Integer = GetTotalNumberOfUser () renvoie l'enregistrement total compté, il est déjà aller-retour vers la base de données, juste pour obtenir le nombre total d'utilisateurs, parce que je dois fournir la valeur param pageSize.

Était-ce utile?

La solution

r.e. # 1:. TotalRecords est un des param

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

VB

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

Vous utilisez totalRecords pour obtenir un nombre record pour la pagination, par exemple.

r.e. # 2: Hmm, non, vous ne devez pas fournir des valeurs de paramètres, sauf si vous voulez que le code pour se comporter d'une manière attendue. lol. Je vous ne manquez pas les 12 années passées à écrire vb.

au sérieux, cependant. oui, les paramètres d'alimentation tel que documenté, obtenir des résultats comme indiqué. thats comment cela fonctionne.

De MSDN

  

Les résultats retournés par GetAllUsers   sont contraints par la pageIndex et   paramètres pageSize. le pageSize   paramètre identifie le maximum   Objets nombre de MembershipUser à   retour dans le   MembershipUserCollection. le   pageIndex paramètre identifie le   page de résultats pour revenir, où 0   identifie la première page. le   totalRecords paramètre est une sortie   paramètre qui est réglé sur le total   nombre d'utilisateurs d'adhésion pour la   configuré applicationName. Pour   Par exemple, s'il y a 13 utilisateurs pour la   applicationName configuré, et la   La valeur pageIndex était de 1 avec un pageSize   5, le MembershipUserCollection   retourné contiendrait la sixième   par les utilisateurs dixième de retour.   totalRecords seraient fixés à 13.

Autres conseils

GetAllUsers(int, int, int) est href="http://msdn.microsoft.com/en-us/library/xh1acb34.aspx" rel="nofollow noreferrer"> conçu pour être utilisé par paginer vos utilisateurs , de sorte que vous devez passer la page de résultats vous commencez sur, le nombre de résultats par page, et il remplira le troisième paramètre avec le nombre total d'enregistrements:

  

Obtient une collection de tous les utilisateurs dans la base de données dans les pages de données

GetAllUsers() vient avec le avertissement suivant :

  

Soyez prudent lorsque vous utilisez la méthode GetAllUsers avec de très grandes bases de données de l'utilisateur, comme MembershipUserCollection résultant dans votre page ASP.NET peut dégrader les performances de votre application.

Cependant, dans votre question que vous déclarez que vous utilisez deux fournisseurs de membres différents - vous dites que l'utilisation CustomSqlRoleManager retourne aucun utilisateur, alors que (probablement), vous obtenez des résultats de retour de MembershipRoleManager

.

Avez-vous essayé d'appeler GetAllUsers() utilisant le MembershipRoleManager?

Est-il possible que la base de données derrière CustomSqlRoleManager n'a pas d'utilisateurs dans ce moment? Est-il possible que CustomSqlRoleManager est pas mal nommé et ne traite pas avec les membres du tout, que des rôles?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top