我在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
答案 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