【问题标题】:How to use user related data at Layout in Asp.Net Core?如何在 Asp.Net Core 布局中使用用户相关数据?
【发布时间】:2019-05-14 17:19:24
【问题描述】:

我有一个使用 Asp.Net Core 编写的网站,我想使用与登录用户相关的其他数据。因此,每次用户打开页面时,都会加载此数据。 问题是我需要 _Layout.cshtml 中的这些数据,所以我不能使用控制器,也不能使用这样的代码:

@{
    var user = await UserManager.GetUserAsync(User);
    var data = await repository.LoadDataAsync(User?.Id);
    //Data usage...
}

因为每次用户打开具有此布局的页面时都会调用它。 我觉得应该有一个简单的解决方案,但我找不到。也许我应该使用缓存?

【问题讨论】:

    标签: c# asp.net-core razor


    【解决方案1】:

    这应该不难。

    您可以将UserManager<TUser> 注入页面并使用如下。

    @inject UserManager<TheUser> userManager;
    

    但您希望在尝试执行任何操作之前确保用户确实已登录。

    所以,你也可以用SignInManager&lt;TUser&gt;注入页面。

    @inject SignInManager<TheUser> signInManager;
    
    @
    
        {
        var user=await userManager.FindByNameAsync(User.Identity.Name);
        }
        if(user!=null && await signInManager.IsSignedInAsync(user)){
        //Do other stuffs with the user.
        }
    

    注意User 属性:

    获取与执行相关的用户的 ClaimsPrincipal 行动。

    我猜它可以通过Microsoft.AspNetCore.Mvc 获得。

    【讨论】:

    • 我现在使用类似的方法。但是我有几个布局相同的页面,每次用户转到另一个页面时,我都必须加载数据。当用户使用此布局打开任何页面时,我只想加载一次。
    • 您需要 _Layout.cshtml 中的用户数据,以便使用 _Layout 的其他页面也可以使用相同的数据?如果是这样,您可以将代码放在局部视图中。如果我理解正确的话。像:await Html.RenderPartialAsync("UserPartial");
    • 我正在尝试做同样的事情,但我似乎无法弄清楚。这个解释似乎很好,但在最初的问题中,这个家伙说他不能使用控制器,那么接受答案中的代码到底去哪里了?又名“控制器”返回什么 _Layout.cshtml
    猜你喜欢
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 2021-09-15
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多