1

私は 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

すべての値は空の文字列として表示されます。どんな助けでも感謝します。Web アプリケーションではなく、Web サイト プロジェクトを使用しています。

4

1 に答える 1

0

最初の質問に答えるために、プロパティの名前と値がシリアル化され、既存のテーブル列に格納されます。詳細については、このブログ投稿を参照してください 。SQLプロファイルプロバイダーを使用してデータベースでASP.NETプロファイルプロパティをシリアル化する方法
これらは、私のWebアプリのプロファイルテーブルの(自動生成された)列です。

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

つまり、プロファイルプロバイダーの外部でクエリを実行するために、プロファイルのプロパティに直接アクセスすることはできません。そのため、デフォルトのプロファイルプロバイダーを使用せず、代わりにユーザーの詳細を別のUserDetailsテーブルに保存するためのいくつかの推奨事項を見てきました。最終的に、Usersテーブルに直接列を追加しました。これは、これまでのところうまく機能していますが、一部のアプリケーションでは最適な選択ではない場合があります。

于 2013-01-09T15:57:45.370 に答える