实现效果:文本框中输入文本实时搜索。
适用场景:用户较少数据量不大的情况,否则建议在点击「查询」后再执行搜索以节省资源。
Search.razor
:
<section style="margin-bottom: 10px">
<input type="text" class="form-control" placeholder="@Placeholder"
@bind="@SearchText" @bind:event="oninput" @onkeyup="OnKeyup" />
</section>
Search.razor.cs
:
using Microsoft.AspNetCore.Components;
namespace BlazorDemo.Components {
public partial class Search {
private Timer _timer = default!;
private string _text = string.Empty;
[Parameter]
public string SearchText {
get => _text;
set {
if (_text == value) return;
_text = value;
SearchTextChanged.InvokeAsync(value);
}
}
[Parameter]
public string Placeholder { get; set; } = "输入文本进行搜索";
[Parameter]
public EventCallback<string> SearchTextChanged { get; set; }
[Parameter]
public EventCallback<string> OnSearch { get; set; }
private async Task OnKeyup() {
if (_timer != null)
_timer.Dispose();
_timer = new Timer(async (sender) => {
await InvokeAsync(() => {
OnSearch.InvokeAsync(SearchText);
});
_timer?.Dispose();
}, null, 500, 0);
await Task.CompletedTask;
}
}
}
使用:
<div class="row">
<div class="col-md-2">
<BlazorDemo.Components.Search @bind-SearchText="@SearchName" Placeholder="搜索名称" OnSearch="OnSearch" />
</div>
<div class="col-md-2">
<BlazorDemo.Components.Search @bind-SearchText="@SearchShellName" Placeholder="搜索壳" OnSearch="OnSearch" />
</div>
<div class="col-md-2">
<BlazorDemo.Components.Search @bind-SearchText="@SearchTag" Placeholder="搜索标签" OnSearch="OnSearch" />
</div>
<div class="col-md-2">
<BlazorDemo.Components.Search @bind-SearchText="@SearchMemo" Placeholder="搜索备注" OnSearch="OnSearch" />
</div>
<div class="col-md-2">
<BlazorDemo.Components.Search @bind-SearchText="@SearchOperator" Placeholder="搜索操作者" OnSearch="OnSearch" />
</div>
</div>
private async Task OnSearch(string searchText) {
_appParam.PageNumber = 1;
await GetApps();
Navigation.NavigateTo(formatCurrentUrl(), false);
}
文档信息
- 本文作者:zhupite
- 本文链接:https://zhupite.com/program/blazor-component-search.html
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)