_Layout 中的 Razor 组件 SelectList。馊主意?
RazorComponent SelectList in _Layout. Bad idea?
我有一个 ASP.NET 使用 razor 页面的核心网络应用程序。我想在所有页面上创建一个下拉列表来选择一个项目。理想情况下,这将从 DbContext 中的 table 填充。有问题的 table 包含几个字段,两个重要的字段是 Id (PK) 和 Name。然后我想以某种方式存储用户的项目选择,并让所有索引页面在填充索引时查看该值。它必须查看 Id 值,但我希望下拉列表显示名称。
我完全是个新手,我正在寻找有关如何操作的指导。我认为 RazorComponent 有意义,但我一点也不确定。
我已经在单个索引的基础上进行过滤,但我正在努力尝试在整个应用程序范围内获得该功能。
非常感谢任何建议,谢谢!
如果您使用的是 Razor Pages,我相信您可以使用 ViewComponents。
视图组件是完全独立的对象,可为 Razor 视图呈现 HTML,并为您提供大量控制。
您可以像这样将服务注入视图组件:
public class ProjectsViewComponent : ViewComponent
{
private readonly ProjectService projectService;
public ProjectsViewComponent(ProjectService projectService)
{
this.projectService = projectService;
}
public async Task<IViewComponentResult> InvokeAsync()
{
return View("default", projectService.GetProjects());
}
}
然后让视图组件将项目转发给组件
@model IEnumerable<SelectListItem>
<h3>Users</h3>
<form>
<ll>
<select class="form-control" asp-items="Model" multiple="true"></select>
</ll>
<button type="submit" asp-page="WhateverPageNeedToHandleIt">Update</button>
</form>
然后最后一步就是在您的 _layout.cs
中调用它
<div class="col-md-3">
@await Component.InvokeAsync("Projects")
</div>
您还可以将列表从项目服务 class 转换为 select 项目列表,如下所示:
return projects.ConvertAll(p =>
{
return new SelectListItem()
{
Text = p.ToString(),
Value = p.ToString(),
Selected = false
};
});
可以在此处找到很好的教程。
https://www.learnrazorpages.com/razor-pages/view-components
我有一个 ASP.NET 使用 razor 页面的核心网络应用程序。我想在所有页面上创建一个下拉列表来选择一个项目。理想情况下,这将从 DbContext 中的 table 填充。有问题的 table 包含几个字段,两个重要的字段是 Id (PK) 和 Name。然后我想以某种方式存储用户的项目选择,并让所有索引页面在填充索引时查看该值。它必须查看 Id 值,但我希望下拉列表显示名称。
我完全是个新手,我正在寻找有关如何操作的指导。我认为 RazorComponent 有意义,但我一点也不确定。
我已经在单个索引的基础上进行过滤,但我正在努力尝试在整个应用程序范围内获得该功能。
非常感谢任何建议,谢谢!
如果您使用的是 Razor Pages,我相信您可以使用 ViewComponents。
视图组件是完全独立的对象,可为 Razor 视图呈现 HTML,并为您提供大量控制。
您可以像这样将服务注入视图组件:
public class ProjectsViewComponent : ViewComponent
{
private readonly ProjectService projectService;
public ProjectsViewComponent(ProjectService projectService)
{
this.projectService = projectService;
}
public async Task<IViewComponentResult> InvokeAsync()
{
return View("default", projectService.GetProjects());
}
}
然后让视图组件将项目转发给组件
@model IEnumerable<SelectListItem>
<h3>Users</h3>
<form>
<ll>
<select class="form-control" asp-items="Model" multiple="true"></select>
</ll>
<button type="submit" asp-page="WhateverPageNeedToHandleIt">Update</button>
</form>
然后最后一步就是在您的 _layout.cs
中调用它<div class="col-md-3">
@await Component.InvokeAsync("Projects")
</div>
您还可以将列表从项目服务 class 转换为 select 项目列表,如下所示:
return projects.ConvertAll(p =>
{
return new SelectListItem()
{
Text = p.ToString(),
Value = p.ToString(),
Selected = false
};
});
可以在此处找到很好的教程。 https://www.learnrazorpages.com/razor-pages/view-components