FluentSearch输入框无法输入,需实现实时触发搜索功能求助
解决FluentSearch实时搜索时输入框清空的问题
问题原因
同时使用@bind-Value和原生@oninput会干扰Blazor的双向绑定机制:@bind-Value本身已经通过输入事件同步绑定变量,手动添加@oninput会导致输入内容无法正确同步到inputValue,最终出现输入框清空的现象。
解决方案
方案一:通过ValueChanged回调处理实时搜索
直接利用FluentSearch继承自InputBase<string>的ValueChanged事件,在值变化时同步更新变量并触发搜索:
<FluentSearch @ref=searchTest Value="@inputValue" ValueChanged="@(async (newValue) => { inputValue = newValue; await SearchEmployees(); })" ValueExpression="@(() => inputValue)" Placeholder="Search for Employee" />
ValueExpression是InputBase组件必需的参数,用于支持表单验证等功能。- 这种方式能确保每输入一个字符就立即触发搜索逻辑。
方案二:通过属性Setter自动触发搜索
修改inputValue的定义,在属性值变更时自动调用搜索方法,同时指定绑定事件为oninput实现实时同步:
首先修改输入框代码:
<FluentSearch @ref=searchTest @bind-Value="@inputValue" @bind-Value:event="oninput" Placeholder="Search for Employee" />
然后修改@code中的inputValue属性:
private string? _inputValue; private string? inputValue { get => _inputValue; set { if (_inputValue != value) { _inputValue = value; // 异步调用搜索,避免阻塞UI渲染 _ = SearchEmployees(); } } }
额外优化
可以移除SearchEmployees方法中的StateHasChanged()调用:因为当inputValue更新时,Blazor会自动触发组件重新渲染,无需手动调用。
内容的提问来源于stack exchange,提问作者Matthew Angel
相关产品推荐
相关产品推荐

