C# ASP.NET Core Simple Razor Page WebApp-向顶部菜单栏添加动态下拉列表
我创建了一个非常简单的ASP.NET Core 3.1 WebApp,它使用Razor页面而不是MVC。我想在顶部菜单栏添加一个动态下拉列表,所有其他页面都可以共享该列表。我已经在_Layout.cshtml中添加了必要的HTML,因此我得到了一个很好的下拉框以及我的其他菜单内容(主页、关于等)-见下文 添加填充my_Layout.cshtml文件下拉列表的代码时,我有哪些选项C# ASP.NET Core Simple Razor Page WebApp-向顶部菜单栏添加动态下拉列表,c#,asp.net,razor-pages,C#,Asp.net,Razor Pages,我创建了一个非常简单的ASP.NET Core 3.1 WebApp,它使用Razor页面而不是MVC。我想在顶部菜单栏添加一个动态下拉列表,所有其他页面都可以共享该列表。我已经在_Layout.cshtml中添加了必要的HTML,因此我得到了一个很好的下拉框以及我的其他菜单内容(主页、关于等)-见下文 添加填充my_Layout.cshtml文件下拉列表的代码时,我有哪些选项 <!DOCTYPE html> <html lang="en"> <head> .
<!DOCTYPE html>
<html lang="en">
<head>
...
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" asp-area="" asp-page="/Index"><img src="images/Logo.png" alt="logo" height="50"></a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
</li>
<li class="nav-item dropdown ml-auto">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownTZ" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Whisky
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#">Gin</a>
<a class="dropdown-item" href="#">Vodka</a>
</div>
</li>
</ul>
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
XXX © 2020 - v1.1.30.1 - your use of this website is subject to our <a asp-area="" asp-page="/TermsConditions">Terms & Conditions</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@RenderSection("Scripts", required: false)
</body>
</html>
...
@RenderBody()
XXX&复印件;2020年-v1.1.30.1-您对本网站的使用受我们的条款和条件约束
@RenderSection(“脚本”,必需:false)
一个合理的解决方案是创建一个视图组件,然后将其添加到_Layout.cshtml。我找到了一个很好的循序渐进的指南,它在路上帮助了我。基本上,我的解决方案涉及:
使用System.Collections.Generic;
使用Microsoft.AspNetCore.Mvc;
命名空间C19QuarantineWebApp.Pages.Components.TimeZoneControl
{
公共类时区控件组件:ViewComponent
{
公共时区控件组件(){}
公共IViewComponentResult调用(字符串timeZoneId)
{
var时区=新列表();
时区.AddRange(新[]{“GMT”、“CET”、“IST”});
返回视图(“默认”,timeZones.ToArray());
}
}
}
Default.cshtml
@model string[]
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownTZ" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Time zones
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
@foreach(var tz in Model) {<a class="dropdown-item" href="#">@tz</a>}
</div>
@model string[]
@foreach(模型中的var-tz){}
\u Layout.cshtml-将原来的下拉列表(参见问题)替换为
在这种情况下,它给出:
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/About">About</a>
</li>
<li class="nav-item dropdown ml-auto">
<vc:time-zone-control time-zone-id="xxx">
</vc:time-zone-control>
</li>
</ul>
</div>
我很想收到有关此解决方案的意见。有没有更简单、更优雅的方法 合理的解决方案是创建视图组件,然后将其添加到_Layout.cshtml。我找到了一个很好的循序渐进的指南,它在路上帮助了我。基本上,我的解决方案涉及:
使用System.Collections.Generic;
使用Microsoft.AspNetCore.Mvc;
命名空间C19QuarantineWebApp.Pages.Components.TimeZoneControl
{
公共类时区控件组件:ViewComponent
{
公共时区控件组件(){}
公共IViewComponentResult调用(字符串timeZoneId)
{
var时区=新列表();
时区.AddRange(新[]{“GMT”、“CET”、“IST”});
返回视图(“默认”,timeZones.ToArray());
}
}
}
Default.cshtml
@model string[]
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownTZ" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Time zones
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
@foreach(var tz in Model) {<a class="dropdown-item" href="#">@tz</a>}
</div>
@model string[]
@foreach(模型中的var-tz){}
\u Layout.cshtml-将原来的下拉列表(参见问题)替换为
在这种情况下,它给出:
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/About">About</a>
</li>
<li class="nav-item dropdown ml-auto">
<vc:time-zone-control time-zone-id="xxx">
</vc:time-zone-control>
</li>
</ul>
</div>
我很想收到有关此解决方案的意见。有没有更简单、更优雅的方法 如果您共享到目前为止创建的代码,将更容易帮助您。下拉组件有很多实现,所以这就是为什么您的解决方案可能不同于我们的解决方案。到目前为止,我还没有创建任何代码。这就是我的观点:哪里是放置代码的最佳位置?要清楚,我不需要帮助实现代码来填充下拉列表。这更像是一个架构问题。获得最简单的解决方案以及更复杂的、更具可扩展性的解决方案将是一件好事。如果您共享了迄今为止创建的代码,则会更容易为您提供帮助。下拉组件有很多实现,所以这就是为什么您的解决方案可能不同于我们的解决方案。到目前为止,我还没有创建任何代码。这就是我的观点:哪里是放置代码的最佳位置?说清楚点,我不需要帮助imp