C# ASP.Net WebForm Membership额外用户详细信息(配置文件)

4
我正在学习如何使用ASP.net会员功能。当用户注册时,他们只需创建用户名和密码,但是我想在我的网站上创建一个名为“个人资料”的页面,让用户填写额外的详细信息,例如名字、姓氏、出生日期等。然而,我不知道在ASP.net会员数据库中应该放置这些信息。有一个名为asp.net_profile的表,但我不确定它是如何工作的。
请问有人能解释一下我该如何做吗?
3个回答

4

您可能需要首先使用Membership.CreateUser创建MembershipUser,获取新创建的用户ID,然后将其额外的个人资料信息插入到单独的表中(例如ExtendedUserInfo等),并使用外键将其与aspnet_Users表关联。


1
是的,这是最简单的方法,但是我想学习如何使用aspnet_profile表完成它 :) 另外,我不确定如何确保他们正在查看的个人资料页面是当前登录用户的详细信息。 - user1638362
@user1638362 aspnet_Profile表并不推荐使用,它的设计很差,尽管对于小规模应用程序可能无所谓,但对于中大型应用程序来说却非常重要。 - Agent007
但是你提出的解决方案是否可扩展呢?如果明天微软发布了一些会员更新,而我所链接的所有内容都已经发布,那么我将会遭受很多痛苦,不是吗? - Johnny_D

4
你应该将内置的成员资格系统视为黑盒子——通常来说,扩展库存成员资格模式是一个相当糟糕的想法。
说实话,配置文件非常丑陋,虽然对于存储杂项设置来说很方便,但我不想存储我关心的提取数据。主要问题是它在不透明的序列化字段中存储东西,因此很难提取您的数据。开销可能很大,因为它会在每个请求上反序列化这些东西,所以如果您有一个广泛的配置文件,它可能会变得昂贵。在大多数情况下,没有必要在每个请求中提取某人的额外配置文件信息。
至于使用,建议从MSDN页面开始。还要注意,在MVC中存在其他挑战——它没有直接连接到该堆栈,尽管仍然可以使用它。
所有这些都说了,你可能想要建立自己的会员资料表。您可能会在内置成员资格部分中重复一些数据,但这没关系。您需要设置此表与成员身份之间的某种关系——我更喜欢使用“所有者帐户ID”结构,而不是直接将其键入帐户,因为这使事情更加灵活。例如,它允许用户拥有多个配置文件,如果必要的话。

1
是的,我将使用WebForm。一方面,您告诉我在架构中创建新表来保存配置文件数据是一个坏主意,另一方面,您说像配置文件详细信息这样的存储信息不应该存储在aspnet_profile表中,因为它需要序列化。你会建议哪一个?创建一个新表吗? - user1638362
不,我说扩展会员架构是个坏主意。我稍微扩展了一下答案以澄清事情。 - Wyatt Barnett
我们在我们的应用程序中成功地使用了@WyattBarnett提出的方法。我们使用了一个包含UserId的表,该UserIddbo.aspnet_Users表中的UserName,然后添加了我们所有的额外内容(如地址、称谓等)。 - Marcel

2
所以,既然您已经配置了成员资格和角色部分,那么您也可以对个人资料部分进行同样的操作。但是,在这里您可以提供属性,例如:
<profile defaultProvider="AspNetSqlProfileProvider">
  <properties>
     <add name="Name" />
     <add name="Weight" type="System.Int32" />
     <add name="BirthDate" 
          type="System.DateTime" />
  </properties>
</profile>

在您的代码中,您可以调用Profile.Name并赋值,ASP.Membership框架会管理存储这些值。
有关如何使用它的更多信息,请参见http://msdn.microsoft.com/en-us/library/d8b58y5d(v=vs.100).aspx,它有点旧,但显示了基础知识。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接