繁体   English   中英

在ASP.NET Core的视图中获取登录的用户名

[英]Get Logged in UserName in view in ASP.NET Core

我的_layout.cshtml有一个“ Log Out按钮。 我想在“注销”按钮中显示“已登录”用户名,以查看当前登录的用户。

<a class="btn btn-sm" asp-action="" asp-controller="">Log Out( @ViewBag.LoggedInUserName )</a>

在我的控制器中,我使用了:

ViewBag.LoggedInUserName = userManager.GetUserName(HttpContext.User); 

这样,我需要在每个控制器中的每个方法中都向ViewBag声明。 我相信还有另一种方法可以做到。

您不需要使用ViewBag从控制器方法传递它。 您可以简单地执行以下操作:

@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager

<a class="btn btn-sm" asp-action="" asp-controller="">Log Out(@UserManager.GetUserName(User))</a>

注意:如果要使用诸如ApplicationUser类的方式扩展IdentityUser ,则将IdentityUser替换为ApplicationUser ,如下所示:

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

创建PartialView并将其放置在共享的_layout.cshtml中。

<partial name="_LoginPartial" />

在您的PartialView中,您可以投放类似以下代码的广告:

@using Microsoft.AspNetCore.Identity

@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager

@if (SignInManager.IsSignedIn(User))
{
    <form asp-area="Identity" asp-page="/Account/Logout" asp-route 
        returnUrl="@Url.Action("Index", "Home", new { area = "" })" method="post" 
        id="logoutForm" class="navbar-right">
        <ul class="nav navbar-nav navbar-right">
            <li>
                <a asp-area="Identity" asp-page="/Account/Manage/Index" 
                 title="Manage">Hello @UserManager.GetUserName(User)!</a>
            </li>
            <li>
                <button type="submit" class="btn btn-link navbar-btn navbar- 
                    link">Logout</button>
            </li>
        </ul>
    </form>
}
else
{
    <ul class="nav navbar-nav navbar-right">
        <li><a asp-area="Identity" asp-page="/Account/Login">Login</a></li>
    </ul>
}

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM