使用用户名或Page.User.Identity.Name作为select参数

时间:2010-12-21 11:04:00

标签: asp.net vb.net sqldatasource

我在loginview控件中有登录控件,在登录模板上有gridview和sqldatasource。

我需要使用用户名来过滤该gridview。但我总是得到错误的对象引用未设置为对象的实例..我也尝试将.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 :(得分:0)

在重新加载页面之前,不会设置Page.User.Identity.Name。因此它在LoggedIn事件中不可用,而是您可以简单地使用Login1.UserName。由于您点击了LoggedIn事件,因此确认您的凭据有效。 在您的情况下,由于Login Control位于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
相关问题