C# 如何在ASP.NET Core 2.1 MVC中生成根级别链接?
ASP.NET Core 2.1 MVC应用程序具有以下路由规则:C# 如何在ASP.NET Core 2.1 MVC中生成根级别链接?,c#,asp.net-core,C#,Asp.net Core,ASP.NET Core 2.1 MVC应用程序具有以下路由规则: routes.MapRoute( name: "blog_list_year_month_paged", defaults: new { controller = "Blog", action = "Index", page = (int?)null, }, template: "blog/{year}/{month}/page/{page}"
routes.MapRoute(
name: "blog_list_year_month_paged",
defaults: new {
controller = "Blog",
action = "Index",
page = (int?)null,
},
template: "blog/{year}/{month}/page/{page}");
routes.MapRoute(
name: "blog_post",
defaults: new {
controller = "Blog",
action = "BlogPost"
},
template: "blog/{year}/{month}/{codename}");
routes.MapRoute(
name: "blog_list_year_month",
defaults: new {
controller = "Blog",
action = "Index",
year = (int?)null,
month = (int?)null,
page = (int?)null,
},
template: "blog/{year?}/{month?}");
母版页具有以下链接:
<a asp-controller="Blog" class="nav-link">Blog</a>
博客
该链接重用当前页面的年
、月
和页面
变量的值。例如,如果当前页面是主页,则路由将生成一个链接,该链接涉及当前页面
值为/Index
,因为主页是一个名为Index的页面(位于/Pages文件夹中)。如果当前页面是特定的博客文章,则生成的url为/blog/2018/2/blog post title
如何有效地表示该链接应该是根链接,即它应该始终生成/blog
url
我已经提出了将所有可能的变量设置为<代码> null <代码>(通过<代码> ASP路由月< /代码>等),但我不认为这是一个好的解决方案。我也知道我可能可以使用路由名称,但我更希望在这种情况下不使用它们。
对于生成根URL的一个选项,请尝试直接使用href创建标记a
,如下所示:
<li><a href="/Blog">Blog</a></li>
@{
var NullRoute = new Dictionary<string, string> { { "year", null } };
}
<li><a asp-controller="Blog" asp-all-route-data="@NullRoute" class="nav-link">Blog</a></li>
对于与当前解决方案类似的另一个选项,请尝试定义空路由值并按如下方式传递:
<li><a href="/Blog">Blog</a></li>
@{
var NullRoute = new Dictionary<string, string> { { "year", null } };
}
<li><a asp-controller="Blog" asp-all-route-data="@NullRoute" class="nav-link">Blog</a></li>
@{
var NullRoute=newdictionary{{“year”,null};
}
创建您自己的标记帮助程序以生成预期的html内容。谢谢您的建议。如果我理解正确,您不知道如何优雅地告诉ASP.NET在生成路由url时忘记当前页面的上下文。您的期望优雅地什么?这与页面的上下文无关。如果按F12键检查Blog
的生成URL,则如果当前URL为Blog/2
,则它已转换为Blog/2
。是的,它转换为Blog/2
,因为当前页面的上下文将其page
路由变量设置为2
。我想说的是,这个链接不应该继承当前页面的page
值(或其他值)。类似地,如果我编写href=“/blog”
,则当前页面的查询参数不会被继承。