c# - 使用 ASP.NET MVC 和 SqlMembershipProvider 在哪里存储额外的用户详细信息?

标签 c# asp.net-mvc membership sqlmembershipprovider asp.net-membership

因此,我正在创建一个 ASP.NET MVC 网站。

它有一个相当复杂的用户注册页面,包含很多字段。我的问题是,我应该在哪里坚持这个?成员(member)提供者工具创建的用户表不包含这些列,我对存储每个用户的附加信息的最佳做法感到困惑?

这是配置文件提供者发挥作用的地方吗?它们是如何工作的?如果不是,您还如何保留和存储 MembershipProvider 表的库存列中未提供的其他用户详细信息?

任何人都可以向我指出一些关于如何处理这种情况的资源,如何在我需要时访问这些额外的用户详细信息,如何使用所有这些信息创建新用户等。

最佳答案

这就是 ASP.NET 配置文件提供程序的用武之地。您可以使用它来存储您想要的有关用户的任何配置文件信息。您需要做的就是在 web.config 文件中添加所需的字段,MSDN Link on how to configure the profile fields in web.config file .总而言之,您只需将要存储的名称和类型值添加到配置文件元素的属性节点。这是一个例子:

<profile enabled="true">
  <properties>
    <add name="Name" />
    <group name="Address">
      <add name="Street" />
      <add name="City" />
      <add name="Zip" type="System.Int32" />
    </group>
  </properties>
</profile>

在 ASP.NET Webforms 中,Visual Studio 会自动创建一个强类型的配置文件类,该类将引用您的自定义配置文件属性。在 MVC 中,这不会发生。要引用用户的个人资料信息,只需调用 HttpContext.Profile["PropertyName"]。一个例子:

HttpContext.Profile["Name"] = name;
HttpContext.Profile.GetProfileGroup("Address")["Zip"] = zip;

编辑:正如安迪所说,如果您想对这些属性运行查询,使用默认的 SqlProfileProvider 并不是很好。他是完全正确的,也许我最初应该注意到这个限制。存在此限制是因为 SqlProfileProvider 将所有配置文件数据存储在三列中:PropertyNames 和 PropertyValuesString/PropertyValuesBinary。所有的键都存储在 PropertyNames 字段中,可以存储为字符串的值存储在 PropertyValuesString 字段中,等等。这意味着很难执行类似“Select * from aspnet_Profile where Age > 10”的查询。

关于c# - 使用 ASP.NET MVC 和 SqlMembershipProvider 在哪里存储额外的用户详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1139825/

相关文章:

asp.net-mvc - 是否有任何相当大的 Web 应用程序(例如 100 万页浏览量/月)在单声道上运行?

php - 成员(member)专区

c# - 当工作线程和UI线程调用同一方法(包括调用ui控件)时出现死锁

C# 正则表达式排序字母和数字字符串

asp.net-mvc - Ninject.MVC3、Nuget、WebActivator 天哪

ASP.NET Web Api Controller 子文件夹路由

asp.net - 如何在不使用 Membership.GetUser() 的情况下访问 ASP.NET Membership 中的 UserId?

asp.net - 可见的 GUID 是否存在安全风险?

c# - 带有 params object[] 构造函数的属性给出了不一致的编译器错误

c# - 来自程序集的 WPF 自定义 FontFamily?