SqlDataSource не будет извлекать данные зарегистрированного пользователя из базы данных?

Я попытался получить данные пользователя на основе вошедшего в систему 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>

person FBEvo1    schedule 19.01.2013    source источник
comment
Вы пытались установить точку останова и проверить значение currentUserId?   -  person Michael Richardson    schedule 19.01.2013
comment
Я проверил, работает ли currentUserId, поместив метку с именем userLabel и добавив userLabel.Text = currentUserId.ToString(); на Page_Load, и он правильно отображает идентификатор пользователя на метке при загрузке страницы... поэтому я знаю, что currentUserId не является проблемой.   -  person FBEvo1    schedule 19.01.2013
comment
Я использовал только EntityDataSource, но я считаю, что вы должны либо установить Type, либо DbType, но не оба сразу. Кроме того, вы можете отредактировать свой вопрос и заголовок, чтобы отразить, что получение идентификатора пользователя не является проблемой.   -  person Michael Richardson    schedule 19.01.2013


Ответы (3)


Вы должны установить точку останова и посмотреть, заполнено ли currentUserId. Я считаю, что это так. Если это так, то проблема заключается не в получении UserId, а в установке значения параметра или выборе данных.

Я думаю, вам нужно изменить тип параметра с string на Guid.

<SelectParameters>
    <asp:Parameter Name="UserId" Type="Guid"></asp:Parameter>
</SelectParameters>
person Michael Richardson    schedule 19.01.2013

Просто измените это:

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();
}
person Pakistan    schedule 19.10.2013

в типах параметров нет опции guid. (Кроме того, в приведенных выше кодах источник данных sql не был установлен SqlDataSource1_Selecting.) Как это может быть ответом? Просто объявите имя параметра и все в порядке.

<asp:Parameter Name="UserId"></asp:Parameter>
person Uzay    schedule 23.11.2013