通过在 URL 中保留路径导航到子类别

Navigating to child categories with keeping a path in the URL

我正在尝试在我的客户端-服务器应用程序中进行导航。我正在尝试制作一个小型在线目录

我希望在浏览类别时,路径显示在 URL:

https://test.com/
https://test.com/controllers
https://test.com/controllers/for-media-screens

https://test.com/
https://test.com/phones
https://test.com/phones/nokia

如果你知道除最后一个link之外的整个路径,你可以在Razor组件中写@page "/phones/{model}"

那不知道整个路径怎么办? @page 指令不能包含一个数组,其值将扩展为 link.

您对如何组织这件事有什么想法吗?

我认为级联参数会起作用,但它们不适用于 @page

我还认为可以将产品的完整路径存储在数据库中,但我不确定这是否是最佳解决方案。

更新: @KirkWoll,原则上,所有类别都是未知的

好吧,看我的意思 可以有大量不同级别的类别和子类别:

https://site.ru/1-level/2-level/.../n-level/product

当我们移动到一级目录时,我们的URL看起来像/1-level。从那里我们可以进入下一级类别,URL 看起来像 /1-level/2-level。等等。

也就是说,我们只具体知道域

相对而言,如果我们的网站上只有 1 个类别,没有任何子类别,那么我们可以简单地在类别页面模板的页面指令中严格设置它的 URL,例如 @page "/category",在商品模板中写@page "/category/{Id:int}

而问题是如何编写将传递前面的 URL 的代码,以便 link 看起来像 https://site.ru/1-level/2-level/.../n-level/product

也就是说,如果可能的话,我需要在类别模板@page "/{?1}/{?2}.../{n}"和产品模板@page中编写"/{?1}/{?2}.../{n}/{Id:int}"

您正在尝试在支持具有任意深度级别的路由方面实现一些开箱即用的东西。一种方法是使用 "catch all" routing facility。它基本上是一种使用给定前缀的所有可能路由的方法。来自文档:

@page "/catch-all/{*pageRoute}"

@code {
    [Parameter]
    public string PageRoute { get; set; }
}

For the URL /catch-all/this/is/a/test with a route template of /catch-all/{*pageRoute}, the value of PageRoute is set to this/is/a/test.

有了它,您应该能够使用 PageRoute、解析它,并执行您需要的操作来支持您的路由要求。