【问题标题】:Navigating to child categories with keeping a path in the URL在 URL 中保留路径导航到子类别
【发布时间】:2021-12-07 09:05:48
【问题描述】:

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

我希望在浏览类别时,路径显示在 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

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

那么当整个路径未知时该怎么办? @page 指令不能包含一个数组,其值将被扩展为一个链接。

你有什么想法可以组织吗?

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

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

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

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

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

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

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

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

问题是如何编写传递前一个 URL 的代码,使链接看起来像 https://site.ru/1-level/2-level/.../n-level/product

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

【问题讨论】:

  • "那么当整个路径未知时怎么办?"这种路径的例子是什么?
  • @KirkWoll,嗨!我已经更新了帖子中问题的内容。请阅读它
  • 谢谢,您对 n 级深度路径的解释为我澄清了您的问题。
  • 你看过"catch all" (i.e. wildcard) routing吗?特别是“对于路由模板为/catch-all/{*pageRoute}的URL/catch-all/this/is/a/testPageRoute的值设置为this/is/a/test。”
  • 该死的,我看了这个文档,但是显然是因为疲劳,因为我一直在寻找解决问题的方法,所以我没有注意到文中的这一段!非常感谢您的帮助,我非常感谢!结果一切都比我预期的要容易得多! :D 如果您使用此答案发帖,我很乐意将其标记为解决方案!

标签: c# asp.net razor blazor


【解决方案1】:

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

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

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

对于路由模板为/catch-all/{*pageRoute}的URL/catch-all/this/is/a/testPageRoute的值设置为this/is/a/test

这样,您应该能够使用 PageRoute,对其进行解析,然后执行您需要的操作来支持您的路由要求。

【讨论】:

    猜你喜欢
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多