首页 > 解决方案 > 单击链接时,blazor 不会更改页面

问题描述

我正在将我的个人博客迁移到 Blazor,但我遇到了问题。我正在开发“下一篇文章”功能,当单击链接时,blazor(或浏览器)不会重定向用户。帖子是下一条路线下的“同一页”@page "/post/{Url}

例如,用户在该站点中,domain.com/post/foo并且该站点中有一个指向domain.com/post/bar. 这是一个简单的链接,如下所示:

<a href="post/bar" title="@Post.Title">
    @Post.Title 
</a>

当用户点击链接时,浏览器的 url 会发生变化,页面的位置会移动到顶部,但页面内容不会改变。

我注意到当我从一个post页面点击到另一个页面时会发生这种行为,但不会发生在站点的“索引”(/)或当我单击帖子上链接到domain.com/tags/{tag}.

需要注意的一件事是,如果我在浏览器中选择 url 并单击 enter 或刷新页面,它实际上会转到我单击的页面,在这种情况下domain.com/post/bar

我的问题是,这实际上是预期的行为还是错误?如果这是预期的行为,是否有任何方法可以使 url 实际转到单击的 url 而不是留在同一页面中。

如果这很重要,我正在使用 net5.0。

谢谢。

标签: c#asp.net.netasp.net-coreblazor

解决方案


作为@enet 答案的补充,您可能正在获取/中的Url属性引用的帖子。请参阅@enet 答案中的最后一段。OnInitializedOnInitializedAsync

解决此问题的一种方法是:

  • 将加载数据的代码放在单独的方法中说LoadDataAsync
  • in SetParameters/SetParametersAsync检测数据引用(在您的情况下Url)是否已更改,如果更改,请调用LoadDataAsync

这里的关键是了解组件生命周期并将代码放在正确的位置。

在加载和导航时设置断点OnInitializedSetParameters观察它们何时被击中。


推荐阅读