c# - 从 .net core 中的 layout.cshtml 访问数据库
问题描述
我在这样的模型中有一组用户:
[Key]
[Required]
public int ID { get; set; }
[ForeignKey("Employee")]
public int? EmployeeID { get; set; }
public int? CompanyID { get; set; }
public string UserID { get; set; }
[DataType(DataType.Text)]
public string Firstname { get; set; }
[DataType(DataType.Text)]
public string Middlenames { get; set; }
[DataType(DataType.Text)]
public string Lastname { get; set; }
[DataType(DataType.Text)]
public string Address { get; set; }
[DataType(DataType.Text)]
public string Postnumber { get; set; }
[DataType(DataType.Text)]
public string City { get; set; }
[DataType(DataType.Text)]
public string Phone { get; set; }
[DataType(DataType.EmailAddress)]
[Required]
public string Email { get; set; }
[DataType(DataType.DateTime)]
public DateTime CreatedDate { get; set; }
[DataType(DataType.DateTime)]
public DateTime EditedDate { get; set; }
[DataType(DataType.DateTime)]
public DateTime CurrentLoginTime { get; set; }
[DataType(DataType.DateTime)]
public DateTime LastLoginTime { get; set; }
public virtual Employee Employee { get; set; }
public virtual Company Company { get; set; }
我想要做的是根据 companyID 是否有值在我的布局文件中显示一个菜单项。
在 MVC5 中,我可以立即做到这一点,但在 .net 核心中,我不知道如何继续或搜索什么。
我希望这里的人可以告诉我,这是如何工作的以及我应该怎么做:-)
解决方案
您可以在这里做的是创建一些服务(并将其注册到 DI 容器),它可以确定您的状况。然后,您可以将该服务注入您的视图并在其上调用一个方法来检查该值:
@inject MyUserService myUserService
@if (await myUserService.GetIsCompanyOwnerAsync(User))
{
<div>Item for company owner</div>
}
然后,在您的服务中,您可以注入您的数据库上下文并根据当前用户查询用户:
public class MyUserService
{
private readonly UserManager<User> _userManager;
public MyUserService(UserManager<User> userManager)
{
_userManager = userManager;
}
public async Task<bool> GetIsCompanyOwnerAsync(ClaimsPrincipal user)
{
var user = await _userManager.GetUserAsync(user);
return user.CompanyID.HasValue;
}
}
请注意,这将导致对每个请求进行数据库查询,以便在布局中呈现该请求。从长远来看,最好将此属性直接公开为对声明主体的声明,例如OwnsCompany
声明。这样,您可以直接在视图中检查声明:
@if (await User.FindFirst("OwnsCompany") != null)
{
<div>Item for company owner</div>
}
推荐阅读
- mysql - MySQL 窗口函数每 5 分钟计算一次平均值或最大值
- regex - 如何使用 JQuery-Inputmask 验证电子邮件地址?
- amazon-web-services - 在负载均衡器后面对多个 AWS EC2 实例进行负载测试以进行深度学习推理时出现问题
- ios - 如何使用 SPM 托管在私有仓库中的 .zip 格式的二进制或 xcFramework
- java - 用于使用 Kotlin/Java 设置的事件的 Google 日历 api 监视方法
- javascript - 带参数调用 Testcafe 客户端函数
- c - (char) 在 ((unsigned char) ~0 >> 1) 之前的作用是什么?
- flutter - flutter moor - 更新表格特定行中的特定列
- .net - .NET 框架 4.8 是否预装在 Windows 11 上
- html - 如何处理这种类型的 JSON 数据?(对象对象)