无权访问用户个人资料

时间:2013-01-09 14:01:24

标签: asp.net profile

我使用mySQL作为ny db并且已经完成了所有的asp成员资格配置。 我在web.comfig文件中设置了其他个人资料,如下所示;

 <profile defaultProvider="MySQLProfileProvider">
  <providers>
    <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
    <remove name="MySQLProfileProvider" />
    <add name="MySQLProfileProvider" type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.6.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="False" autogenerateschema="True" enableExpireCallback="False" />
  </providers>
  <properties>
    <add name="AccountConfirmationId" type="System.String" />
    <add name="FullName" type="System.String" />
    <add name="CompanyName" type="System.String" />
    <add name="CompanyLocationName" type="System.String" />
  </properties>
</profile>

我的第一个问题是实际存储的配置文件值在哪里?我的会员资料表中没有创建其他列。

其次,我使用下面概述的方法将注册过程中输入的值存储到配置文件中,从“下一步”按钮点击事件。

 Protected Sub RegisterUser_NextButtonClick(sender As Object, e As WizardNavigationEventArgs) Handles RegisterUser.NextButtonClick
    'set Profile object and give it its property values
    Dim userProfile As ProfileCommon = TryCast(ProfileCommon.Create(RegisterUser.UserName), ProfileCommon)
    userProfile.AccountConfirmationId = Guid.NewGuid().ToString()
    userProfile.SetPropertyValue("FullName", FullName.Text)
    userProfile.SetPropertyValue("FullName", CompanyName.Text)
    userProfile.SetPropertyValue("FullName", CompanyLocationName.Text)
    userProfile.Save()


    Session("rolerequest") = ddlRegisterAs.SelectedItem.ToString()
    Session("acctconfid") = userProfile.AccountConfirmationId
    Session("completename") = FullName.Text
    Session("compname") = CompanyName.Text
    Session("compnamelocation") = CompanyLocationName.Text

End Sub

我尝试使用以下方法在管理员用户管理页面上检索配置文件值(通过下拉列表中的用户名选择触发)

Protected Sub ddlSiteUsers_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ddlSiteUsers.SelectedIndexChanged

    Try
        Dim userProfile As ProfileCommon = Profile.GetProfile(ddlSiteUsers.SelectedItem.ToString())

        tbProfileUserFullname.Text = userProfile.GetPropertyValue("FullName").ToString()
        tbProfileCompany.Text = userProfile.GetPropertyValue("CompanyName").ToString()
        tbProfileCompLoc.Text = userProfile.GetPropertyValue("CompanyLocationName").ToString()
    Catch ex As Exception
        lblSiteUserErrMessage.Text = "User profile not found...   " & ex.Message.ToString()
        lblSiteUserErrMessage.Visible = True
    End Try

End Sub

所有值都以空字符串形式出现。任何帮助赞赏。 我使用的是网站项目,而不是网络应用程序。

1 个答案:

答案 0 :(得分:0)

要回答第一个问题,属性名称和值将被序列化并存储在现有的表列中。有关详细信息,请参阅此博客文章: How ASP.NET Profile Properties are serialized in the database using Sql Profile Provider
这些是我的网络应用程序的配置文件表中的(自动生成的)列:

[UserId] [uniqueidentifier] NOT NULL,
[PropertyNames] [nvarchar](4000) NOT NULL,
[PropertyValueStrings] [nvarchar](4000) NOT NULL,
[PropertyValueBinary] [image] NOT NULL,
[LastUpdatedDate] [datetime] NOT NULL,

简而言之,无法直接访问配置文件属性,以便在配置文件提供程序之外进行查询。出于这个原因,我看到了一些不使用默认配置文件提供程序的建议,而是将用户详细信息存储在单独的UserDetails表中。我最终将列直接添加到Users表中,到目前为止这对我来说很好,但可能不是某些应用程序的最佳选择。