为了账号安全,请及时绑定邮箱和手机立即绑定

Asp .Net Core 在数据库检查布局上隐藏菜单

Asp .Net Core 在数据库检查布局上隐藏菜单

C#
达令说 2023-04-29 16:51:04
我需要根据数据库检查在侧边栏菜单中隐藏和显示一些链接,但由于布局没有页面模型,我该如何实现呢?如果完成索赔很容易,但我需要访问数据库@if (User.Identity.IsAuthenticated){    <li class="nav-item has-treeview">        <a asp-page="/Account/Documentos/Index" class="nav-link custom-sidebar-link">            <i class="nav-icon fas fa-file-alt"></i>            <p class="text-white">                Documentos            </p>        </a>    </li>    // need to hide this on database check    <li class="nav-item has-treeview">        <a asp-page="/Account/Consumos/Index" class="nav-link custom-sidebar-link">            <i class="nav-icon fas fa-cogs"></i>            <p class="text-white">                Arranque Produção            </p>        </a>    </li>}  
查看完整描述

2 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

由于您正在尝试在布局(不包含模型)中执行数据库操作,因此依赖注入可以帮助您。

您可以定义一个具有 DB 访问方法的类,将其注册到您的服务,并从任何 View/Controller/pageModel 轻松使用它的方法

我将用代码解释:

这是我们的依赖:

public class MyDependency 

{

    // You can use dependency injection in a chained fashion, 

    // DBContext is injected in our dependency

    private readonly DBContext _dbContext;


    public MyDependency(DBContext dbContext)

    {

        _dbContext = dbContext;

    }


    // Define a method that access DB using dbContext

    public bool CheckInDb()

    {

        return dbContext.SomeCheck();

    }

}

将其注册到您的服务中Startup(您的依赖项应在注册 DBContext 后注册)


public void ConfigureServices(IServiceCollection services)

{

    // Some code here


    services.AddDbContext<DBContext>(options =>

        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));


    services.AddScoped<MyDependency>();

}

然后在你的布局中:


@inject MyDependency MyDependency


@if(MyDependency.CheckInDb())

{

    // Do something

else

{

    // Do something else

}


查看完整回答
反对 回复 2023-04-29
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

您可以使用视图模型或 HttpContext



查看完整回答
反对 回复 2023-04-29
  • 2 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信