【问题标题】:MVC Passing data to a viewMVC 向视图传递数据
【发布时间】:2020-02-13 22:02:00
【问题描述】:

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

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

在帖子详情部分有两个按钮EditDelete

我想使用if-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


    【解决方案1】:

    有很多方法可以实现这一点,例如您可以在控制器中读取用户 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))
    

    【讨论】:

      猜你喜欢
      • 2011-11-08
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 2018-12-08
      • 2011-07-26
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多