获取有关当前登录用户的DB信息到DetailsView

时间:2012-01-16 13:57:59

标签: c# ado.net asp.net-membership detailsview

我已经扩展了asp.net成员资格,使用UserId GUID作为外键在一个单独的表中包含其他用户信息(地址详细信息,电话号码等)。

我正在尝试创建一个DetailsView,其中当前登录的用户可以检查其配置文件并进行更新。我已经关注了ASP.NET上的Scott Mitchell tutorial但它对我不起作用。虽然我没有收到任何错误,但我没有看到任何数据。

我在aspx代码中设置了标签,以显示正确返回用户ID(它们是),如果我在查询窗口中运行手动SELECT查询,则DB会检索结果。

我没有包含UPDATE语句等因为我想先获得一个基本的SELECT语句。关于进一步测试的任何想法都将受到赞赏,变通方法或任何明显的错误! 感谢。

ASPX:

<asp:DetailsView ID="UserProfile" runat="server" 
    AutoGenerateRows="False" DataKeyNames="mem_number" 
    DataSourceID="UserProfileDataSource" DefaultMode="Edit" 
    onitemupdated="UserProfile_ItemUpdated">
              <Fields>
                  <asp:BoundField DataField="lname" HeaderText="lname" 
                      SortExpression="lname" />
                  <asp:BoundField DataField="addr1" HeaderText="addr1" 
                      SortExpression="addr1" />
                  <asp:BoundField DataField="addr2" HeaderText="addr2" 
                      SortExpression="mem_addr2" />
        <asp:CommandField ShowEditButton="True" />
              </Fields>
          </asp:DetailsView>
<asp:SqlDataSource ID="UserProfileDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:wtcConnectionString %>"
    SelectCommand="SELECT [lname], [addr1], [addr2] FROM [member] WHERE ([UserId] = @UserId)" OnSelecting="UserProfileDataSource_Selecting">
              <SelectParameters>
                  <asp:Parameter Name="UserId" Type="Object" />
              </SelectParameters>

          </asp:SqlDataSource>

          <asp:Label ID="Label3" runat="server" Text="currentuser"></asp:Label>
          <br />
          <asp:Label ID="Label4" runat="server" Text="providerIdKeyString"></asp:Label>

C#代码背后:

protected void UserProfileDataSource_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
        string providerIdKeyString = string.Empty;
        providerIdKeyString = currentuser.ProviderUserKey.ToString();
        Label3.Text = currentuser.ToString();
        Label4.Text = providerIdKeyString.ToString();

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

1 个答案:

答案 0 :(得分:1)

好的,问题出在SelectParameters中。我将Type更改为“String”,我得到了我的结果!对不起,但我不知道为什么。欢迎进一步评论。 感谢所有观看和贡献的人。