L'adhésion ASP.NET avec méthode ne peux pas utiliser de GetAllUsers deux fournisseurs
-
22-09-2019 - |
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.
-
Qu'est-ce qui ne va pas la déclaration ci-dessus?
-
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.
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?