Razor Pages 路由仅使用一个参数,而不是两个
Razor Pages routing only working with one parameter, not two
我有一个显示杂货的 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§ion=Bread
一切正常。
我想做的是改用 /Shop/Product/Bakery
和 /Shop/Product/Bakery/Bread
这样的 URL。
我在 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 并不总是正确显示。例如,我有以下标记生成 parent/child 组 <ul>
,这些标记用 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
有人知道我在这里做错了什么吗?如果我还需要包含任何内容,请告诉我。
您可以这样设置页面路由:
.AddRazorPagesOptions(options => {
options.Conventions.AddAreaPageRoute("Shop", "/Product", "/Shop/Product/{category?}/{section?}");
});
生成url
我有一个显示杂货的 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§ion=Bread
一切正常。
我想做的是改用 /Shop/Product/Bakery
和 /Shop/Product/Bakery/Bread
这样的 URL。
我在 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 并不总是正确显示。例如,我有以下标记生成 parent/child 组 <ul>
,这些标记用 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
有人知道我在这里做错了什么吗?如果我还需要包含任何内容,请告诉我。
您可以这样设置页面路由:
.AddRazorPagesOptions(options => {
options.Conventions.AddAreaPageRoute("Shop", "/Product", "/Shop/Product/{category?}/{section?}");
});
生成url