如果 URL 相同(除了最后一部分:“/{variable}”),则 NavigationManager 不会导航到页面

Gp0*_*wer 4 blazor maui maui-blazor

我正在构建 .NET 6 MAUI Blazor 应用程序。该应用程序有一个顶部导航,可以让用户从当时所在的应用程序中的任何位置转到他们的个人资料。

\n

像这样使用导航管理器:navManager.NavigateTo($"/Profile/{loggedInUser.Username}");在所有情况下都有效,除了一种情况,如果用户当前在其他人的个人资料上,则导航管理器不执行任何操作。

\n

我相信这是因为当前页面和它试图访问的页面本质上是相同的页面Profile.razor,唯一的区别是 URL 的用户名部分/Profile/{username},应用程序通过该部分知道将用户数据加载到页面上。

\n

我已经像这样解决过它

\n
navManager.NavigateTo("/");\nnavManager.NavigateTo($"/Profile/{loggedInUser.Username}");\n
Run Code Online (Sandbox Code Playgroud)\n

通过先导航到另一个页面然后返回到个人资料页面,导航成功。

\n

目前这对我来说不会造成问题,因为页面Index.razor不显示数据库中的任何数据并立即加载,因此转换不明显。但将来索引页面将是加载最多数据的页面,这种解决问题的方法并不是一个好的方法,因为用户将首先看到索引页面加载。此外,不会有一个页面不需要加载任何数据,因此我无法像我在这里所做的那样将其设置为立即运行其他页面。

\n

如果我像这样使用导航管理器的forceLoad选项navManager.NavigateTo($"/Profile/{loggedInUser.Username}", true);\n我只会收到一条错误消息:

\n
\n

嗯\xe2\x80\xa6 无法访问此页面。https://0.0.0.0/Profile/username上的网页可能存在问题,或者可能已永久移至新网址。

\n
\n

在配置文件页面上的 OnInitializedAsync() 函数中,我根本无法使用断点捕获它进入页面。

\n
\n

顶部导航是一个 Razor 组件,它自己始终加载在MainLayout.razor

\n
<div class="page @DarkTheme()">\n    <TopNav/>\n    <main>\n        <article>\n            @Body\n        </article>\n    </main>\n    <BottomNav/>\n</div>\n
Run Code Online (Sandbox Code Playgroud)\n

它不是“个人资料”页面顶部的一个 div,我可以在其中编写不同的函数,因此它只是重新加载页面并通过将该 ID 设置为请求的 ID 来获取登录用户的数据。\n另外我不知道如何找出正文中加载的页面,TopNav.razor因此我可以尝试进行相同的 id 交换。

\n
\n

英语不是我的母语,这是我在这里发布的第一个问题,但我希望我足够好地描述了这个问题,以便人们能够理解。如果您需要更多信息或有任何疑问,我将很乐意为您解答。

\n

MrC*_*tis 6

如果您导航到同一页面,则您只是更新了您猜测的组件。

OnInitialized{Async}不再运行,但OnParametersSet{Async}确实运行。您需要在 中编写代码来OnParametersSet{Async}检测您感兴趣的参数是否已更改,然后采取适当的操作。