Asp .Net Core 在数据库检查布局时隐藏菜单
Asp .Net Core hide menu on layout on database check
根据数据库检查,我需要在侧边栏菜单中隐藏和显示一些链接,但由于布局没有页面模型,我该如何实现?如果完成索赔很容易,但我需要访问数据库
@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>
}
您可以使用 viewmodel 或 HttpContext
由于您尝试在布局(不包含模型)中执行数据库操作,Dependency Injection 可以帮助您。
您可以定义具有数据库访问方法的 class,将其注册到您的服务,并从任何 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
}
根据数据库检查,我需要在侧边栏菜单中隐藏和显示一些链接,但由于布局没有页面模型,我该如何实现?如果完成索赔很容易,但我需要访问数据库
@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>
}
您可以使用 viewmodel 或 HttpContext
由于您尝试在布局(不包含模型)中执行数据库操作,Dependency Injection 可以帮助您。
您可以定义具有数据库访问方法的 class,将其注册到您的服务,并从任何 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
}