如何在 ASP.NET Core Razor Pages 项目的 _layout.cshtml 文件中使用 Razor Page Using Entity Framework 作为部分视图?

Posted

技术标签:

【中文标题】如何在 ASP.NET Core Razor Pages 项目的 _layout.cshtml 文件中使用 Razor Page Using Entity Framework 作为部分视图?【英文标题】:How to use Razor Page Using Entity Framework as a partial view in _layout.cshtml file in ASP.NET Core Razor Pages project? 【发布时间】:2021-07-14 23:22:15 【问题描述】:

在 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 方面没有经验。那么如何使用 Entity 框架获取数据并将它们显示在 _layout.cshtml 文件中作为 ASP.NET Core Razor Pages 项目中的部分视图?

【问题讨论】:

【参考方案1】:

默认情况下,partials 传递给与 parent 相同的模型。

添加 &lt;partial name="_Employees" model="Employees" /&gt;(确保您的部分视图在 razer 页面中以下划线开头)。此外,您应该使用复数来命名集合,因此在您的列表中使用Employees 而不是Employee。

您也可以改用@Html.Partial() 方法,并传递模型。

【讨论】:

感谢您的回复。调试器无法将 model="Employees" 识别为模型! @Parham.D - 您是否将 Employee 集合更改为Employees? 是的,但调试器无法识别它!

以上是关于如何在 ASP.NET Core Razor Pages 项目的 _layout.cshtml 文件中使用 Razor Page Using Entity Framework 作为部分视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET Core 的自定义 TagHelper 中呈现 Razor 模板?

如何在 asp.net core razor 页面中拒绝匿名用户?

如何多次提交表单(asp.net core razor)

如何ASP.NET Core Razor中处理Ajax请求

如何在 ASP.NET Core 2.0 Razor 页面中填充下拉列表

如何使用 ASP.NET Core Razor 页面预选下拉列表中的项目