从Asp.Net Core _Layout视图访问数据库

时间:2018-11-27 13:55:52

标签: c# razor asp.net-core controller

我想在我的登录表单中添加选择组件/模块的选项。我想在我的家庭控制器中调用GetComponents()方法,该方法读取组件表,并向Layout返回一个列表。然后,我可以将此列表传递给LoginViewModel,以提供可供用户登录时选择的可用组件的列表。我的系统是如此,因此Account文件夹中没有视图,因此无法访问Account Controller在我的模态引导登录表单之前。

在实例化我的LoginViewModel之前,我需要设置listFromController值,如下所示。

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 :(得分:0)

我最终将该方法放置在Startup.cs中,并在Configure方法中使用诸如“ myComponents = GetComponents();”之类的方法设置list属性。在方法末尾。

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;}