【发布时间】:2020-11-19 18:33:26
【问题描述】:
我有一个显示杂货的 ASP.NET Core 3.1 Razor Pages 网站。有一个名为 Shop 的区域,其中包含一个名为 Product.cshtml 的 Razor 页面。该页面没有设置任何路由,只有简单的@page 指令,没有其他内容。
页面中的OnGet方法有几个参数,包括两个字符串参数,分别命名为category和section...
public async Task<IActionResult> OnGet(string currentFilter,
string section,
string category,
string searchAreaID,
string so, int ps, int p = 1)
如果我浏览到/Shop/Product?category=Bakery 或/Shop/Product?category=Bakery&section=Bread 一切正常。
我想做的是改用/Shop/Product/Bakery 和/Shop/Product/Bakery/Bread 之类的网址。
我在Startup.cs中添加了路由如下...
.AddRazorPagesOptions(options => {
options.Conventions.AddAreaPageRoute("Shop", "/Product", "/Shop/Product/{category}/{section}");
options.Conventions.AddAreaPageRoute("Shop", "/Product", "/Shop/Product/{category}");
// other routes set here (none relating to the above)
})
这允许我使用上面显示的 URL 进行浏览,但是当我使用标签助手生成链接时,URL 并不总是正确显示。例如,我有以下标记生成<ul>s 的父/子集,这些标记用 CSS 标记(为清楚起见,省略)...
<ul>
@foreach (Category category in Model.Categories) {
<li>
<a asp-area="Shop"
asp-page="/Product"
asp-route-category="@category.Name">@category.Name</a>
<ul>
<li>
<ul>
@foreach (Section sub in category.Sections) {
<li><a asp-area="Shop"
asp-page="/Product"
asp-route-category="@category.Name"
asp-route-section="@sub.Name">@sub.Name</a></li>
}
</ul>
</li>
</ul>
</li>
}
</ul>
顶级链接中的URL是正确的,格式为/Shop/Product/Bakery,但是二级链接没有在路由中使用段名,而是在查询字符串中添加,例如/Shop/Product/Bakery?section=Bread
有人知道我在这里做错了什么吗?如果还有什么需要补充的,请告诉我。
【问题讨论】:
标签: c# asp.net-mvc asp.net-core asp.net-mvc-routing razor-pages