Asp Net Core MVC:如何在局部视图中获取aspnetusers的列

问题描述 投票:1回答:2

我在aspnetusers表中添加了一个用户定义的列hasAvatar。但是当我在_LoginPartial.cshtml时,如何获得当前用户的信息?

我想得到像这样的信息

@if (myUser(User).hasAvatar==true)
{
    <p>..avatar</p>
}
else
{
    <p>please login</p>
}
c# asp.net-core asp.net-identity
2个回答
1
投票

使用视图组件:

public class LoginViewComponent : ViewComponent
{
    private readonly UserManager<ApplicationUser> _userManager;

    public LoginViewComponent(UserManager<ApplicationUser> userManager)
    {
        _userManager = userManager ?? throw new ArgumentNullException(nameof(userManager));
    }

    public async Task<IViewComponentResult> InvokeAsync()
    {
        var user = await _userManager.GetUserAsync(HttpContext.User).ConfigureAwait(false);
        return View(user);
    }
}

然后,将_LoginPartial.cshtml的内容移动到Views\Shared\Components\Login\Default.cshtml。添加@modelApplicationUser声明,然后您可以使用Model.hasAvatarApplicationUser上的任何其他属性。

最后,在您之前渲染_LoginPartial的位置,将代码替换为:

@await Component.InvokeAsync("Login");

1
投票

您可以在视图中注入UserManager并从中获取当前用户:

@inject UserManager<User> UserManager
@{
    var myUser = await UserManager.GetUserAsync(User);
}

您还可以检查当前请求是否通过以下方式进行身份验证:

@User.Identity.IsAuthenticated
© www.soinside.com 2019 - 2024. All rights reserved.