猿问

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

我需要根据数据库检查在侧边栏菜单中隐藏和显示一些链接,但由于布局没有页面模型,我该如何实现呢?如果完成索赔很容易,但我需要访问数据库


@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>

}  


达令说
浏览 120回答 2
2回答

弑天下

由于您正在尝试在布局(不包含模型)中执行数据库操作,因此依赖注入可以帮助您。您可以定义一个具有 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}

犯罪嫌疑人X

您可以使用视图模型或 HttpContext
随时随地看视频慕课网APP
我要回答