2013-03-26 181 views
0

我想在登錄後獲取用戶名,但不起作用。登錄後獲取用戶名

public partial class Login : System.Web.UI.Page 
    { 
     string strUser; 

     protected void Login1_LoggedIn(object sender, EventArgs e) 
     { 
      strUser = Membership.GetUser().UserName; 

      Response.Redirect("Home"); 
     } 
     protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) 
     { 
      strUser = Membership.GetUser().UserName; 
      Response.Redirect("Home"); 
     } 
    } 

這是我的錯誤: enter image description here

回答

0

你需要檢查並確保用戶的登錄成功。它看起來像你僅僅使用標準的ASP.NET成員資格,所以這應該工作:

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) 
{ 
    if(e.Authenticated) 
    { 
     strUser = Membership.GetUser().UserName; 
     Response.Redirect("Home"); 
    } 
    else 
    { 
     strUser = "Login Failed!"; 
    } 
} 

這已經有一段時間,因爲我與這些控件的工作,但你可能需要先確定自己e.Authenticated價值和設置它。如果是這樣,你需要的,如果塊我上面寫的前把這:

bool authenticated = Membership.ValidateUser(Login1.UserName, Login1.Password); 
e.Authenticated = authenticated; 

我覺得香草ASP.NET成員資格爲你處理的那部分;如果您使用的是自定義身份驗證方案,那麼您肯定需要這樣做。

1

Membership.GetUser().UserName爲空,因爲新的主體對象尚未附加到當前的HttpContext對象。

因此,您需要使用Login控件的用戶名顯式檢索最近登錄的用戶。

更新:感謝jadarnel27

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) 
{ 
    // Get the username from login control and retrieves the user info explicitly 
    Membership user = Membership.GetUser(Login1.Username); 
    ... 
} 
+1

你可以用'Login1.UserName'來獲取在該登錄控件中鍵入的用戶名(而不是尋找和鑄造文本框)。雖然我的+1,這是合理的。 – jadarnel27 2013-03-27 14:35:42

+0

@ jadarnel27好戲。謝謝你的提示。 – Win 2013-03-27 15:30:01