ASP.NET成员资格不会填充新用户

时间:2009-08-10 20:18:57

标签: asp.net asp.net-membership

我正在使用ASP.NET成员资格提供程序来处理当前站点上的所有成员资格活动。

我遇到了一个奇怪的问题。如您所知,如果您熟悉Asp.Net成员资格,则数据将存储在ProfileCommon中。

所以你可以使用ProfileCommon.UserId来获取用户ID。

这一切在我的生产服务器,我的登台服务器和本地开发服务器上的旧帐户上都能正常工作。

但是,如果我在本地开发服务器上创建新用户,则不会填充Profilecommon对象,并且它会引发错误,因为页面引用了例如ProfileCommon.UserId并且它为null,因此抛出异常。用户已通过身份验证,但未填充ProfileCommon。

有没有人对于为什么会发生这种情况有任何想法/建议?

编辑:这是我的web.config条目。我不知道为什么我们删除AspnetSqlProfileProvider然后添加它。这是我接手的网站,我对asp.net会员资格还不是很熟悉。

  <profile defaultProvider="AspNetSqlProfileProvider">
  <providers>
    <remove name="AspNetSqlProfileProvider"/>
    <add name="AspNetSqlProfileProvider"
         type="System.Web.Profile.SqlProfileProvider" 
         connectionStringName="ConnectionString"/>
</providers>

实际资料信息;

        <profile defaultProvider="SqlProfileProvider">
        <providers>
            <remove name="AspNetSqlProfileProvider"/>
            <add name="SqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="FiftyMillionDBConnection"/>
        </providers>
        <properties>
            <add name="FirstName" type="String" serializeAs="String"/>
            <add name="LastName" type="String" serializeAs="String"/>
            <add name="EmailAddress" type="String" serializeAs="String"/>
            <add name="ScreenName" type="String" serializeAs="String"/>
            <add name="BirthDay" type="DateTime" serializeAs="String"/>
            <group name="Address">
                <add name="AddressLine1" type="String" serializeAs="String"/>
                <add name="AddressLine2" type="String" serializeAs="String"/>
                <add name="City" type="String" serializeAs="String"/>
                <add name="State" type="String" serializeAs="String"/>
                <add name="Zip" type="String" serializeAs="String"/>
            </group>
            <group name="PersonalInfo">
                <add name="Gender" type="String" serializeAs="String"/>
                <add name="Height" type="String" serializeAs="String"/>
            </group>
            <group name="OtherInfo">
                <add name="Agent" type="String" serializeAs="String"/>
                <add name="Employee" type="String" serializeAs="String"/>
                <add name="Source" type="String" serializeAs="String"/>
                <add name="EventRegistration" type="String" serializeAs="String"/>
            </group>
            <group name="AuthInfo">
                <add name="GUID" type="String" serializeAs="String"/>
                <add name="RegSource" type="String" serializeAs="String"/>
                <add name="ReceiveMail" type="String" serializeAs="String"/>
            </group>
        </properties>
    </profile>

谢谢!

2 个答案:

答案 0 :(得分:2)

web.config中的Profile部分是否使用与Membership部分相同的connectionStringName值?这是我要检查的第一件事。

编辑:您可以发布完整的配置文件配置块吗?你应该有一些定义属性的东西,比如

<profile enabled="true">

    <properties>

        <add name="UserId" type="Int32"/>

        <add name="Gender" type="string"/>

        <add name="Age" type="Int32"/>

    </properties>

</profile>

答案 1 :(得分:1)

除了connectionStringName之外,您可能还需要仔细检查applicationName。如果它们不匹配,或者您在一个部分而不是另一个部分中定义应用程序名称,则会遇到问题。

   <membership defaultProvider="SqlProvider">
      <providers>
         <add name="SqlProvider"
          type="..."  
          connectionStringName="SomeConnString"
          applicationName="SomeApp"
          ...
          ... />
      </providers>
   </membership>

   <profile defaultProvider="ProfileProvider">
     <providers>
        <clear />
        <add name="ProfileProvider" 
            type="..." 
            applicationName="SomeApp"/>
     </providers>
     <properties>
        ...
     </properties>
  </profile>