我有一個使用成員和形式的認證網站: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()
並得到錯誤。
任何想法?
檢查出更新的答案.... –