为什么使用NavigationManager导航到同一页面时会触发OnInitialized

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

这是在具有每页交互性的 Blazor 服务器应用程序中。

在我的搜索页面中,我想在参数更改时更新页面url,以便可以复制链接。我的理解是,通过使用 NavigationManager Blazor 将检测到不需要完全重新加载,并跳过组件初始化。

我希望单击“开始搜索”后以下代码不会点击

OnInitialized()

    @page "/test/{searchvalue}"
    @rendermode InteractiveServer
    @inject NavigationManager _NavigationManager

    <InputText @bind-Value="SearchInput"></InputText>
    <div @onclick="(() => Search())">Start search</div>
    
    <br />
    <br />
    
    Test input: @SearchValue
    
    @code{
    
        [Parameter]
        public string SearchValue { get; set; } = "";
    
        public string SearchInput { get; set; } = "";
    
        protected override void OnInitialized()
        {
            // Inital filter settings etc.
            // ...
    
            base.OnInitialized();
        }
    
        protected override void OnParametersSet()
        {
            SearchInput = SearchValue;
        }
    
        protected void Search()
        {
            _NavigationManager.NavigateTo($"/test/{SearchInput}", false, false);
        }
    }
c# blazor blazor-server-side
1个回答
0
投票

这个问题主要与静态路由有关,如文档中提到的

当交互式渲染模式分配给路由组件时, Blazor 路由器在静态 SSR 与静态 服务器上的路由。这种类型的路由称为交互式路由 路由。

静态路由器使用端点路由和 HTTP 请求路径来 确定要渲染哪个组件。当路由器变成 交互式,它使用文档的 URL(浏览器中的 URL) 地址栏)来确定要渲染哪个组件。这意味着 交互式路由器可以动态改变哪个组件 如果文档的 URL 动态更改为另一个有效的 URL,则呈现 内部 URL,并且无需执行 HTTP 请求即可执行此操作 获取新页面内容。

您没有将交互式服务器渲染模式分配给 app.razor 中的路由组件

<Routes @rendermode="InteractiveServer" />

为您设置每个组件的交互式服务器渲染模式,因此您的应用程序始终处于静态路由。

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