我正在构建一个 .NET 6 MAUI Blazor 应用程序。该应用程序有一个顶部导航,可以让用户从应用程序中当时所在的任何位置转到他们的个人资料。
像这样使用导航管理器:
navManager.NavigateTo($"/Profile/{loggedInUser.Username}");
适用于所有情况,除了一种情况,如果用户当前在其他人的个人资料上,则导航管理器不执行任何操作。
我相信这是因为当前页面和它试图访问的页面本质上是相同的页面
Profile.razor
,唯一的区别是URL的用户名部分/Profile/{username}
,应用程序知道要加载的女巫用户数据到页面上。
我已经像这样解决了这个问题
navManager.NavigateTo("/");
navManager.NavigateTo($"/Profile/{loggedInUser.Username}");
先导航到另一个页面,然后返回个人资料页面,导航成功。
目前这对我来说不会造成问题,因为
Index.razor
页面不显示数据库中的任何数据并立即加载,因此转换不明显。但将来索引页面将是加载最多数据的页面,这种解决问题的方法并不是一个好的方法,因为用户将首先看到索引页面加载。此外,不会有一个页面不需要加载任何数据,因此我无法像我在这里所做的那样将其设置为立即运行其他页面。
如果我像这样使用导航管理器的forceLoad选项
navManager.NavigateTo($"/Profile/{loggedInUser.Username}", true);
我刚刚收到一条错误消息:
嗯...无法访问此页面。 https://0.0.0.0/Profile/username 的网页可能有问题,或者可能已永久移至新网址。
在配置文件页面上的 OnInitializedAsync() 函数中,我根本无法使用断点捕获它进入页面。
顶部导航是一个 Razor 组件,它自己始终加载在
MainLayout.razor
<div class="page @DarkTheme()">
<TopNav/>
<main>
<article>
@Body
</article>
</main>
<BottomNav/>
</div>
它不是“个人资料”页面顶部的一个 div,我可以在其中编写不同的函数,因此它只是重新加载页面并通过将该 ID 设置为请求的 ID 来获取登录用户的数据。 另外,我不知道如何找出
TopNav.razor
内的正文中加载了哪些页面,因此我可以尝试进行相同的 id 交换。
英语不是我的母语,这是我在这里发布的第一个问题,但我希望我足够好地描述了这个问题,让人们能够理解。如果您需要更多信息或有任何疑问,我很乐意为您提供帮助。
如果您导航到同一页面,则您只是更新了您猜测的组件。
OnInitialized{Async}
不再运行,但 OnParametersSet{Async}
再次运行。您需要在OnParametersSet{Async}
中编写代码来检测您感兴趣的参数是否发生变化,然后采取适当的操作。
我遇到了同样的问题,发现它不喜欢在网址中包含点。
您的login.userName 中有一个点吗?