c# - 初始化 Blazor 组件时初始加载数据;页面更新时不要再次触发该查询
问题描述
我有一个 Blazor 组件,它在无序列表中显示来自 SQL 的数据。LoadData 方法由 OnInitialized() 事件调用并填充一个List<T>
(在本例中为 ProjectModel 列表)。数据量很大,所以我只从 SQL 中获取前 100 行(作为预览)。
我使用 foreach 遍历该列表并<li>
为每个元素创建一个。这工作正常。
但是,该页面还包含一个搜索框。一旦用户输入搜索字符串并单击搜索按钮,就会调用另一种方法再次从 SQL 获取数据,这次是根据用户提供的搜索词进行过滤。过滤是在 SQL 查询中完成的。查询结果再次用于填充 ProjectModels 列表(它会覆盖列表的第一个实例)。
我可以在一毫秒内看到新的过滤列表,然后会弹出初始数据。我猜这是因为 OnInitialized 再次被触发,其中包含使用初始数据填充列表的查询。
这是我的组件的样子:
@page "/projects"
<form>
<input type="search" placeholder="enter search term..." @bind-value="searchTerm">
<button type="submit" @onclick="GetSearchResults">Search</button>
</form>
<ul>
@foreach (var project in projects)
{
<li>@project.ProjectId</li>
<li>@project.ProjectTitle</li>
}
</ul>
@code {
private string searchTerm;
private List<ProjectModel> projects = new List<ProjectModel>();
protected override void OnInitialized()
{
projects = GetProjects(); //the method that loads the inital data
}
private void GetSearchResults()
{
projects = GetProjectsBySearchTerm(searchTerm);
}
}
我怎样才能正确地做到这一点?IE
- 获取页面加载时的初始预览数据并将其放入
<ul>
- 将 中的数据替换为
<ul>
根据提供的搜索词查询到的数据,同时避免一旦数据发生变化就触发初始加载。
C# 和 Blazor 新手在这里,所以请放轻松,如果我需要提供更多详细信息,请告诉我。感谢大家。
解决方案
这是因为form
- 您button
正在提交表单,这会导致浏览器重新加载页面。
最简单的解决方法 - 不要在 SPA 应用程序上使用表单,除非您真的想重新加载页面。
推荐阅读
- java - 使用for循环java反向制作一个数字
- ruby-on-rails - 查询结果在 postgresql(rails) 中的一组间隔范围
- excel - 使用键对堆积条形图进行颜色编码
- python - 在python中使用for循环打印几个字符串
- javascript - 如何检查每个请求在express js中都有cookie
- java - 第一个或第二个弹出窗口
- java - 如何将一维数组打印为 3 x 3,如何让 RNG 计算机检查值并继续搜索空白空间?
- testing - 在 Flutter 中测试时如何查找 Stack 的顺序?
- uipath - 如何在uipath的单个数据表中分配不同的变量
- javascript - 如何检测pangram