如何在 ASP.NET Core Razor Pages 项目中使用实体框架作为 _layout.cshtml 文件中的分部视图来使用 Razor Page?

问题描述 投票:0回答:2

在 ASP.NET Core Razor Pages 项目中,我想从数据库中获取员工姓名并将其显示为侧边栏菜单中的菜单项。侧边栏菜单位于 _layout.cshtml 文件中。

我使用实体框架作为部分视图添加 Razor 页面

员工部分视图页面模型代码

 public class EmployeesModel : PageModel
{
    private readonly OneStopContext _context;

    public EmployeesModel(OneStopContext context)
    {
        _context = context;
    }

    public IList<Employee> Employee { get;set; }

    public async Task OnGetAsync()
    {
        Employee = await _context.Employees.ToListAsync();
    }
}

员工部分视图 - 查看代码

@model OneStopAdmin.Pages.EmployeesModel
@foreach (var item in Model.Employee) {
     @item.FirstName
}

然后我只需在 _layout.cshtml 文件中添加此部分视图即可显示侧边栏菜单中的项目。

<partial name="Employees"/>

但我收到以下错误

InvalidOperationException:模型项传入 ViewDataDictionary 的类型为“OneStopAdmin.Pages.IndexModel”,但是 此 ViewDataDictionary 实例需要类型的模型项 'OneStopAdmin.Pages.EmployeesModel'.

我搜索并尝试了一些解决方案,但没有一个有效。 我没有 ASP.NET Core 经验。那么如何使用实体框架获取数据并将它们作为 ASP.NET Core Razor Pages 项目中的部分视图显示在 _layout.cshtml 文件中?

c# asp.net razor partial-views razor-pages
2个回答
0
投票

默认情况下,分部会传递与父级相同的模型。

添加

<partial name="_Employees" model="Employees" />
(确保您的部分视图在 Razer 页面中以下划线开头)。另外,您应该使用复数来命名集合,因此请使用“Employees”作为您的列表,而不是“Employee”。

您也可以使用

@Html.Partial()
方法代替,并传递模型。


0
投票

帕勒姆, 您正试图将错误的模型传递给您的偏颇观点。错误消息指出...

InvalidOperationException:传递到 ViewDataDictionary 的模型项的类型为“OneStopAdmin.Pages.IndexModel”,但此 ViewDataDictionary 实例需要类型为“OneStopAdmin.Pages.EmployeesModel”的模型项。

© www.soinside.com 2019 - 2024. All rights reserved.