Доступ к базе данных из представления Asp.Net Core _Layout - PullRequest
0 голосов
/ 27 ноября 2018

Я хочу добавить опцию выбора компонента / модуля в форму входа в систему.Я хотел бы вызвать метод GetComponents () в моем домашнем контроллере, который читает таблицу компонентов и возвращает список в мой макет.Затем я могу передать этот список своему LoginViewModel, чтобы предоставить список доступных компонентов, которые пользователь может выбрать при входе в систему. Моя система такова, что у меня нет представления в папке «Учетная запись», и поэтому к контроллеру учетной записи нет доступа.перед моей модальной начальной загрузкой формы.

Мне нужно установить значение listFromController, прежде чем я создаю экземпляр LoginViewModel в моем представлении макета, как показано ниже.

public async Task<IList<SelectListItem>> GetComponents()
{
    var query = _context.Components.AsQueryable();
    return (await query.ToListAsync())
        .Select(d => new SelectListItem { Text = d.Name, Value = d.Id.ToString() })
        .ToList();
}
@await Html.PartialAsync(
    "LoginModal",
    new LoginViewModel { AvailableComponents = listFromController })

1 Ответ

0 голосов
/ 27 ноября 2018

Я закончил тем, что поместил метод в свой Startup.cs и установил свойство списка в моем методе Configure с помощью чего-то вроде "myComponents = GetComponents ();"в конце метода.

private static IList<SelectListItem> GetComponents()
    {
        XDbContext _context = new XDbContext();
        var query = _context.Components.AsQueryable();
        return (query.ToList())
            .Select(d => new SelectListItem { Text = d.Name, Value = d.Id.ToString() })
            .ToList();
    }

    private static IList<SelectListItem> myComponents;

    public static IList<SelectListItem> ComponentList
    {
        get
        {
            return myComponents;
        }
    }

В верхней части моего _Layout.cshtml я добавил следующее:

@{var listFromController = @Startup.ComponentList;}
...