【发布时间】:2020-09-22 14:39:30
【问题描述】:
我正在将 Blazor Server 用于带有带有列表/搜索结果的分页列表的网站(就像在任何普通的在线目录网站中一样)。 我想知道以下场景的最佳解决方案是什么:
我有一个搜索组件,它将类别名称作为参数加上查询字符串,因此 url 看起来像这样https://example.com/cars?loc=london?text=silver
它可以给我超过 10 个结果,所以我添加了分页。
当我转到下一页时,网址将添加页码,例如 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 实现同样的目标