【问题标题】:Where is GetAllUsers in membership provider?会员提供商中的 GetAllUsers 在哪里?
【发布时间】:2012-05-25 21:03:51
【问题描述】:

我查看了会员提供者文档,会员提供者 (http://msdn.microsoft.com/en-us/library/system.web.security.membership.getallusers) 中应该有两个 GetAllUsers 方法。

但是当我查看 System.Web.Security 公开的方法时(在

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.ApplicationServices.dll )

它只有一种方法(具有分页功能的方法)。

我在哪里可以找到从数据库中返回所有用户的方法?似乎无法获取所有用户的列表或查找数据库中有多少用户。

--更新

查看 System.Web.Security,我发现 SqlMembershipProvider 定义如下:

public class SqlMembershipProvider : System.Web.Security.MembershipProvider

但是这个类没有任何公共的 GetAllUsers() 方法。

如何访问它的基本 GetAllUsers 方法?

【问题讨论】:

  • 当你真正调用“Membership.GetAllUsers()”时会发生什么?
  • 出现此错误:错误 17 方法“GetAllUsers”没有重载需要 0 个参数
  • 您使用的是哪个版本和类型(原始/MVC)ASP.Net?
  • 我将 MVc 3 与 .Net 4 一起使用。
  • 嗨,Mans,您是否偶然发现了解决方案?

标签: asp.net-mvc asp.net-mvc-3 model-view-controller asp.net-membership membership-provider


【解决方案1】:

问题是“会员提供商中的 GetAllUsers 在哪里?”

答案是它不在MembershipProvider中。它在 System.Web.Security.Membership 中

您在问题中提供的 MSDN 链接也说了同样的话。

GetAllUsers 方法静态且重载。

int userCount = 0;
MembershipUserCollection muc1 =  System.Web.Security.Membership.GetAllUsers();
MembershipUserCollection muc2 = System.Web.Security.Membership.GetAllUsers(0, int.MaxValue, out userCount);

如果您遇到命名空间问题,他们会在 .net 3.5 和 .net 4.0 之间调整一些内容

几年前我就被这个咬过。

.Net 4.0 System.Web.Security.MembershipProvider ambiguous reference?

【讨论】:

    【解决方案2】:

    它的工作方式是您必须在您的web.config 中配置您的会员资格提供商,例如SqlMembershipProvider。然后Membership.GetAllUsers 方法将采用默认配置的MembershipProvider 并调用其方法GetAllUsers 并传入0 用于当前页面索引,int.MaxValue 用于每页的总记录(以及out int获取商店中的总记录)。

    如果您在调用此方法时遇到问题,请检查以下内容:

    • 您引用了正确的 .net 程序集
      • System.Web
      • System.Web.ApplicationServices
      • System.Configuration
    • 你有正确的命名空间引用System.Web.Security
      • 在文件顶部的using 语句中
      • 直接在引用的类型上
    • 您的web.config 已注册默认MembershipProvider

    注意事项

    • 派生自MembershipProviderSqlMembershipProvider 与类型Membership 的类型或类型层次结构不同。因此,并非您在 Membership 上看到的所有方法都可以在派生自 MembershipProvider 的类型上找到。
    • Membership 类型是静态的,因此包括 Membership.GetAllUsers 在内的所有成员也是静态的。
    • Membership 类型是为了方便起见,它的大多数成员都会调用已注册的默认 MembershipProvider

    代码示例:

    using System.Web.Security;
    namespace MyNameSpace
    {
        public class MembershipTests
        {
            public void Test()
            {
                var users = Membership.GetAllUsers();
                // same as
                var totalRecords = 0;
                users = Membership.GetAllUsers(0, int.MaxValue, out totalRecords);
                // same as (Membership.Provider gets the default registered MembershipProvider)
                users = Membership.Provider.GetAllUsers(0, int.MaxValue, out totalRecords);
            }
        }
    }
    

    来自文档

    备注

    GetAllUsers 将应用程序的所有成员用户的信息作为 MembershipUser 对象的集合返回。对非常大的用户数据库使用 GetAllUsers 方法时要小心,因为 ASP.NET 页面中生成的 MembershipUserCollection 可能会降低应用程序的性能。

    【讨论】:

      【解决方案3】:

      我认为您应该查看 System.Web.dll 而不是 System.Web.ApplicationServices.dll

      【讨论】:

      • 查看这个dll,我发现:
      • 您不是在寻找 System.Web.Security.Membership.GetAllUsers() 吗?...它在 Membership 中,而不是 SqlMembershipProvider。
      • 我无法通过 SqlMembershipProvider 访问它。
      猜你喜欢
      • 2010-12-02
      • 2011-05-27
      • 1970-01-01
      • 2012-03-23
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      相关资源
      最近更新 更多