Asp .Net Core скрыть меню на макете на проверку базы данных - PullRequest
0 голосов
/ 22 июня 2019

Мне нужно скрыть и показать некоторые ссылки в боковом меню в соответствии с проверкой базы данных, но, поскольку у макета нет модели страницы, как я могу этого добиться? Это легко, если это сделано с претензиями, но мне нужно попасть в базу данных

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

1 голос
/ 23 июня 2019

Поскольку вы пытаетесь выполнять операции с БД в макете (который не содержит модель), Внедрение зависимостей может вам помочь.

Вы можете определить класс, который имеетметоды с доступом к БД, зарегистрируйте его в своих службах и легко используйте его методы из любого 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
}
1 голос
/ 23 июня 2019

Вы можете использовать viewmodel или HttpContext

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...