2

ログインしたUserIdに基づいてユーザーのデータを取得しようとしましたが、進行しませんでした。助言がありますか?

protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
    // Get a reference to the currently logged on user  
    MembershipUser currentUser = Membership.GetUser();    

    // Determine the currently logged on user's UserId value   
    Guid currentUserId = (Guid)currentUser.ProviderUserKey;   

    // Assign the currently logged on user's UserId to the @UserId parameter     
    e.Command.Parameters["@UserId"].Value = currentUserId; 
}

そしてこれはSqlDataSource

  <asp:SqlDataSource ID="SqlDataSource1" runat="server"
      ConnectionString='<%$ ConnectionStrings:NaviConnectionString %>' 
    SelectCommand="SELECT [UserId], [FirstName], [LastName] FROM [UserProfiles] WHERE ([UserId]  = @UserId)">
    <SelectParameters>
        <asp:Parameter Name="UserId" Type="String"></asp:Parameter>
    </SelectParameters>
  </asp:SqlDataSource>

そしてこれはGridView

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
               DataKFFeyNames="UserId" DataSourceID="SqlDataSource1" 
               EmptyDataText="There are no data records to display." 
               DataKeyNames="UserId">
     <Columns>
         <asp:BoundField DataField="UserId" HeaderText="UserId" SortExpression="UserId" />
         <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
         <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
     </Columns>
</asp:GridView>

表示するデータレコードはありません。

ここに画像の説明を入力してください

ただし、クエリビルダーでコードを実行すると、機能します。

したがってUserId、データベースから手動で取得する必要があります。

ここに画像の説明を入力してください

次に、クエリビルダーに移動して実行useridし、の値にを貼り付けますUserID

ここに画像の説明を入力してください

UserId次に、 :に基づいて正しいデータを表示します。

ここに画像の説明を入力してください

私もこれに変更してみました:

  <SelectParameters>
        <asp:Parameter Name="UserId" Type="Empty" DbType="Guid"></asp:Parameter>
  </SelectParameters>
4

3 に答える 3

1

ブレークポイントを設定して、データcurrentUserIdが入力されているかどうかを確認する必要があります。そうだと思います。その場合、UserIdの取得は問題ではありませんが、代わりにパラメータ値の設定またはデータの選択が問題になります。

パラメータのタイプを文字列からGUIDに変更する必要があると思います

<SelectParameters>
    <asp:Parameter Name="UserId" Type="Guid"></asp:Parameter>
</SelectParameters>
于 2013-01-19T13:54:18.320 に答える
0

これを変更するだけです:

protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)

{

// Get a reference to the currently logged on user  
   MembershipUser currentUser = Membership.GetUser();    

// Determine the currently logged on user's UserId value   
Guid currentUserId = (Guid)currentUser.ProviderUserKey;   

// Assign the currently logged on user's UserId to the @UserId parameter     
e.Command.Parameters["@UserId"].Value = currentUserId.ToString();
}
于 2013-10-19T09:08:22.497 に答える
0

パラメータタイプには、guidオプションはありません。(上記のコードでも、SQLデータソースはSqlDataSource1_Selectingに設定されていません。)どのように答えることができますか?パラメータ名とそのOKを宣言するだけです。

<asp:Parameter Name="UserId"></asp:Parameter>
于 2013-11-23T08:52:09.033 に答える