首页 > 解决方案 > MVC 向视图传递数据

问题描述

我正在尝试为delete post已登录且他/她与帖子ID中相同的用户提供权限userId。有 2 个controllers Account负责用户登录和post controller. 创建新帖子时,这是我userId在帖子控制器中获取创建操作的方式:

var user_id = userManager.GetUserId(HttpContext.User);

在帖子详细信息部分有 2 个按钮EditDelete

我正在考虑使用 anif-else来隐藏按钮,但我不知道如何访问userId

@if (signInManager.IsSignedIn(User) && Model.Item.userId == ??)
{
    <div class="card-footer text-center">
        <a asp-action="edit" asp-controller="home" class="btn btn-primary" asp-route-id="@Model.Item.Id">Edit</a>
        <form method="post" asp-action="DeleteUser" asp-route-id="@Model.Item.Id">
            <button type="submit" class="btn btn-danger">Delete</button>
        </form>
    </div>
}

我应该创建一个Cookie,还是可以UserManager以某种方式使用?

标签: asp.net-core-mvc

解决方案


有很多方法可以实现这一点,例如您可以在控制器中读取用户 ID 并设置 viewbag 以保留该值。或者您可以通过以下方式直接获取剃须刀中的用户ID:

@using Microsoft.AspNetCore.Identity
@inject UserManager<ApplicationUser> UserManager

@if (signInManager.IsSignedIn(User) && Model.Item.userId == @UserManager.GetUserId(User))

或者 :

@using System.Security.Claims;
@if (signInManager.IsSignedIn(User) && Model.Item.userId == @User.FindFirstValue(ClaimTypes.NameIdentifier))

推荐阅读