我有一个使用成员和形式的认证网站:ASP.NET会员登录:用户重定向登录后
ASP.NET页:
<asp:LoginView
ID="HeadLoginView" ...
<AnonymousTemplate>
<asp:Login ID="LoginUser" OnLoggedIn="LoginUser_LoggedIn" ... >
<LayoutTemplate>
<asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">Username:</asp:Label>
<asp:TextBox ID="UserName" runat="server" CssClass="textEntry"></asp:TextBox>
<asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Password:</asp:Label>
<asp:TextBox ID="Password" runat="server" CssClass="passwordEntry" TextMode="Password"></asp:TextBox>
<asp:CheckBox ID="RememberMe" runat="server"/>
<asp:Label ID="RememberMeLabel" runat="server" AssociatedControlID="RememberMe" CssClass="inline">Remember me.</asp:Label>
<asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Login" style="width:100%; height:35px"/>
</LayoutTemplate>
</asp:Login>
</AnonymousTemplate>
...
</asp:LoginView>
后面的代码:
protected void LoginUser_LoggedIn(object sender, EventArgs e)
{
MembershipUser user = Membership.GetUser();
if (Roles.IsUserInRole(user.UserName, "User"))
{
// Do something and redirect to user page...
}
if (Roles.IsUserInRole(user.UserName, "Admin"))
{
// Do something and redirect to admin page...
}
}
问题是Membership.GetUser()
总是返回null。我试图获得用户名为Page.User.Identity.Name
,但它总是空字符串。有没有办法找到当前登录用户的用户名或甚至更好:定义登录后行为<asp:LoginView>
或<asp:Login>
?
编辑:
MSDN:Login.LoggedIn Event Occurs when the user logs in to the Web site and has been authenticated.
(link)所以,问题是,为什么认证后的用户Membership.GetUser()返回null?
我的一个同事说,而不是使用Membership.GetUser()
使用Membership.GetUser(UserNameTextBox.Text)
,这是可以的,因为用户进行身份验证使用该用户名,但问题是,我不能找到一个办法让Username.Text
。我用findControl()
并得到错误。
任何想法?
检查出更新的答案.... –