Использование имени пользователя или Page.User.Identity.Name для параметра выбора - PullRequest
0 голосов
/ 21 декабря 2010

У меня есть элемент управления входом в элемент управления loginview, а в шаблоне входа в систему есть gridview и sqldatasource.

Мне нужно использовать имя пользователя для фильтрации этого вида сетки. Но я всегда получаю ошибку Ссылка на объект не установлена ​​на экземпляр объекта. Я также пытался добавить .tostring к page.user.identity.name

Посмотрите на мой код ниже:

<asp:LoginView ID="LoginView1" runat="server">
<AnonymousTemplate>
    <asp:Login ID="Login1" runat="server"  OnLoggedIn="Login1_LoggedIn">        
    </asp:Login>
</AnonymousTemplate>

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
    ConnectionString="<%$ ConnectionStrings:ApplicationServices %>"
    ProviderName="<%$ ConnectionStrings:ApplicationServices.ProviderName %>"
    SelectCommand="SELECT DISTINCT [UserName], [Date], [TimeIn], [TimeOut], [Total] FROM [attendance] ORDER BY [Date] where username = @username ">
    <SelectParameters>
        <asp:Parameter Name="username" />
    </SelectParameters>            
</asp:SqlDataSource>

Для кода

Protected Sub Login1_LoggedIn(ByVal sender As Object, ByVal e As EventArgs)

    TryCast(LoginView1.FindControl("SqlDataSource1"), SqlDataSource).SelectParameters("username").DefaultValue = Page.User.Identity.Name

End Sub

1 Ответ

0 голосов
/ 21 декабря 2010

Page.User.Identity.Name не устанавливается, пока страница не будет перезагружена. Поэтому он недоступен в событии LoggedIn, но вместо этого вы можете просто использовать Login1.UserName. Поскольку вы попали в событие LoggedIn, это подтверждает, что ваши учетные данные действительны. В вашем случае, поскольку элемент управления Login находится внутри элемента управления LoginView, вам сначала нужно получить ссылку на этот элемент управления, как показано ниже:

Protected Sub Login1_LoggedIn(ByVal sender As Object, ByVal e As EventArgs)

     Dim login1 As Login = DirectCast(sender, Login)
    TryCast(LoginView1.FindControl("SqlDataSource1"), SqlDataSource).SelectParameters("username").DefaultValue
= login1.UserName

End Sub
...