asp.net-core-mvc - MVC 向视图传递数据
问题描述
我正在尝试为delete post
已登录且他/她与帖子ID
中相同的用户提供权限userId
。有 2 个controllers
Account
负责用户登录和post
controller
. 创建新帖子时,这是我userId
在帖子控制器中获取创建操作的方式:
var user_id = userManager.GetUserId(HttpContext.User);
在帖子详细信息部分有 2 个按钮Edit
和Delete
我正在考虑使用 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
以某种方式使用?
解决方案
有很多方法可以实现这一点,例如您可以在控制器中读取用户 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))
推荐阅读
- db2-400 - 通过 SQL 访问数据区
- macos - mac 自定义 localhost 与文件主机上的端口
- angularjs - 在AngularJs中动态更改日期时间更改事件的最小,最大日期
- javascript - 如何将 CSS 和 JS 添加到 Docker 图像
- java - JDBI bindBean 找不到命名参数
- ubuntu - 启用 DNS 转发 Bind9
- visual-studio - Visual Studio 中的 XAML 预览不显示标题栏
- stm32 - HC-SR-04 与 STM32
- c++ - C ++多集,在位置返回键?
- go - 如何正确使用通道进行并发 POST API 调用并将数据记录在文件中