2017-11-01 14 views
1

ApplicationUserクラスを拡張して、2つの特別なプロパティ、FirstNameおよびLastNameを追加しました。両方のプロパティは、データベースに正しく保持されます。ASP.netのビューからカスタムApplicationUserプロパティにアクセスするコア2

public class ApplicationUser : IdentityUser 
{ 
    [Required] 
    [StringLength(100)] 
    public string FirstName { get; set; } 

    [Required] 
    [StringLength(100)] 
    public string LastName { get; set; } 
} 

私は簡単な初心者の例を以下午前、および問題のコードは、ユーザー認証コマンドで新規プロジェクトによって生成されたようです:

@inject SignInManager<ApplicationUser> SignInManager 
@inject UserManager<ApplicationUser> UserManager 

@if (SignInManager.IsSignedIn(User)) 
{ 
    <form asp-area="" asp-controller="Account" asp-action="Logout" method="post" id="logoutForm" class="navbar-right"> 
     <ul class="nav navbar-nav navbar-right"> 
      <li> 
       <a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Hello @UserManager.GetUserName(User)!</a> 
      </li> 
      <li> 
       <button type="submit" class="btn btn-link navbar-btn navbar-link">Log out</button> 
      </li> 
     </ul> 
    </form> 
} 

、代わりのHello @UserManager.GetUserName(User)!私はHello ???????.FirstName!

を言いたいです

ビューから余分なプロパティにアクセスする方法が見つかりません。どのようにそれを行うための任意の提案?

ありがとうございます!

答えて

4

UserManagerをサービスに(またはあなたのケースで)表示する必要があります。あなたはその後、UserManager.Usersプロパティ経由でユーザーを照会することができます

UserManager<ApplicationUser> userManager; 

:これはあなたのケースでApplicationUserだろうジェネリック型パラメータを持っています。また あなたは、現在のユーザーを取得し、そのClaimsPrincipalあなたが対応するApplicationUserを取得するには、次のコードを使用することができます持っている必要がある場合:

ApplicationUser user = await UserManager.GetUserAsync(claimsPrincipal); 
string firstName = user.FirstName; 

私は(個人的に)その上にそれほど熱心ではないですが、ネットコアはinjection into viewsをサポートしています次の構文を使用します。

@inject UserManager<ApplicstionUser> UserManager 
+0

「ClaimsPrincipal」タイプのユーザーが既に注入されていることがわかります。ユーザー属性のクエリはどのように表示されますか? –

+0

@HMihail:「ClaimsPrincipal」の使用に関する私の回答を更新しました。あなたのコードであなたの質問を更新していただけますか? – CalC

+0

私はビューコードを追加しました。 –

関連する問題