2015-12-06 41 views
0

所以我的用戶仍然應該使用他們的電子郵件地址登錄,但我想我的頂級菜單通過他們的名字來迎接他們。我已經實施了這個名字,我只需要一種方法來展示它。Asp.net Identity MVC,如何在_Layout中登錄用戶名。 User.Identity.Name給我發電子郵件

目前我在我的頂級菜單中有這個。

Logged in as @User.Identity.Name 

這讓我AppUser.EmailAddress,但我需要的AppUser.Name

這是我的登陸行動,目前它僅包含從loginviewmodel(電子郵件,密碼,與rememberMe)數據。

public async Task<IActionResult> Login(LoginViewModel login, string returnUrl = null) 
     { 
      if (!ModelState.IsValid) 
      { 
       return View(login); 
      } 

     var result = await _signInManager.PasswordSignInAsync(
      login.EmailAddress, 
      login.Password, 
      login.RememberMe, false); 

     if (!result.Succeeded) 
     { 
      ViewBag.Succeeded = false; 

      return View(login); 
     } 

     if (string.IsNullOrWhiteSpace(returnUrl)) 
     { 
      return RedirectToAction("Index", "Home"); 
     } 
     return Redirect(returnUrl); 

該名稱存在於我的AppUser類和RegisterViewModel中,由註冊操作使用。

我使用的身份3.0.0,但我歡迎解決它在其它版本的方式,

+0

使用數據庫中的電子郵件地址加載它們的名稱並顯示 – CRice

+4

不要命中數據庫 - ASP.NET身份使用聲明,並且存在特定的聲明m類型爲GivenName和Surname。用戶登錄時,設置這些聲明值並使用擴展方法顯示該值。有關詳細信息,請參閱我的答案:http://stackoverflow.com/questions/31974228/can-you-extend-httpcontext-current-user-identity-properties/31976327#31976327 –

+0

謝謝,我會查看它一旦找到時間。 – user3621898

回答

0

試試這個:

ApplicationUser user = System.Web.HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.Current.User.Identity.GetUserId()); 

然後你有user,你可以用它喜歡:

Var username=user.lastname; 
+2

不要這樣做 - 您將無法在每次獲取用戶名的請求上敲擊數據庫。由於您使用的是Asp.net標識,因此請在聲明中設置用戶名稱 –

相關問題