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

问题描述 投票:0回答:2

我正在构建一个 .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 交换。


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

blazor maui maui-blazor
2个回答
6
投票

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

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


0
投票

我遇到了同样的问题,发现它不喜欢在网址中包含点。

您的login.userName 中有一个点吗?

© www.soinside.com 2019 - 2024. All rights reserved.