【问题标题】:Blazor Server - Pagination & NavigationBlazor 服务器 - 分页和导航
【发布时间】:2020-09-22 14:39:30
【问题描述】:

我正在将 Blazor Server 用于带有带有列表/搜索结果的分页列表的网站(就像在任何普通的在线目录网站中一样)。 我想知道以下场景的最佳解决方案是什么:

  1. 我有一个搜索组件,它将类别名称作为参数加上查询字符串,因此 url 看起来像这样https://example.com/cars?loc=london?text=silver

  2. 它可以给我超过 10 个结果,所以我添加了分页。

  3. 当我转到下一页时,网址将添加页码,例如 https://example.com/cars?loc=london?text=silver?page=3

我的问题是,当我第一次访问该组件时,它会按预期执行 OnInitializedAsync() 和 OnParametersSetAsync()。

当我单击下一个/上一个页码时,我有下面的代码,但导航管理器没有再次调用 OnInitializedAsync() 和 OnParametersSetAsync() 方法,因此我无法根据页码获取新列表(我只能看到url中的页码但什么也没有发生)。

我可以强制 Blazor 再次运行 OnInitializedAsync() 和 OnParametersSetAsync() 还是我做错了?

public void PageIndexChanged(int newPageNumber)
{
    if (newPageNumber < 1 || newPageNumber > totalPages)
    {
        return;
    }
    currentPage = newPageNumber;
    //...
    query.Add("page", currentPage.ToString());

    NavigationManager.NavigateTo(QueryHelpers.AddQueryString(categoryUrl, query));
}

【问题讨论】:

  • OnInitialized(Async) 仅在创建组件时执行一次。每当需要设置参数时都会调用 OnParametersSet(Async)。我建议你发布你的整个代码,以便我们检查它,并告诉你如何让它工作
  • 基本上我想知道为什么这没有做任何事情(除了更改地址栏中的 url)。 NavigationManager.NavigateTo(QueryHelpers.AddQueryString(categoryUrl, query));我需要在下面添加这一行以获得更新的结果: await GetListings(categoryUrl, searchLocation, searchText, currentPage);组件路径是@page "/{categoryUrl}" 我可以添加一个完整的代码,但真的没有更多
  • 需要网址中的页码吗?如果不需要,这可以更容易地完成。
  • 当用户转到列表详细信息然后单击浏览器中的重新运行时,我正在使用 url 中的页面,所以我知道他在列表中的位置(使用 query.TryGetValue("page", out var页号))。我知道使用普通的 Web 应用程序会更容易,所以我不知道是否或如何使用 Blazor 实现同样的目标

标签: blazor blazor-server-side


【解决方案1】:

喂,

这是一个远射,你尝试过吗;

navigationManager.NavigateTo(url,true)

最后的 true 强制导航管理器(重新)加载页面。

Navigation Manager info

问候,

【讨论】:

  • 太棒了!谢谢!这就是我想要的。简单问题的简单解决方案
猜你喜欢
  • 2022-10-08
  • 2020-02-10
  • 2021-08-06
  • 2021-05-10
  • 2021-09-21
  • 1970-01-01
  • 2020-04-14
  • 2020-04-03
  • 1970-01-01
相关资源
最近更新 更多