You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在MudAutocomplete中集成MudHighlighter实现搜索关键词高亮?

在MudAutocomplete中实现搜索文本高亮

当然可以通过MudHighlighter实现下拉项的搜索文本高亮,核心是利用MudAutocomplete的自定义ItemTemplate来集成组件,以下是具体可行方案:

方案一:集成MudHighlighter(官方组件推荐)

通过自定义下拉项模板,将用户输入的搜索文本传递给MudHighlighter,就能自动高亮匹配内容。

修改后的完整代码示例:

<EditForm EditContext="editContext">
    <DataAnnotationsValidator />
    <MudAutocomplete Label="Help search ..." @bind-Value="choice.State" Required="false"
                     SearchFunc="@SearchAsync" Immediate="true" CoerceValue="@coerceValue" ResetValueOnEmptyText="true"
                     AdornmentIcon="@Icons.Material.Filled.Search" AdornmentColor="Color.Primary"
                     For="@(() => choice.State)" @ref="autocompleteRef">
        <!-- 自定义下拉项模板,用MudHighlighter包裹显示文本 -->
        <ItemTemplate Context="item">
            <MudHighlighter SearchTerm="@autocompleteRef.Text" Text="@item.Name" />
        </ItemTemplate>
    </MudAutocomplete>
</EditForm>

@code {
    // 获取Autocomplete实例以读取当前搜索文本
    private MudAutocomplete<StateModel> autocompleteRef;
    private ChoiceModel choice = new();
    private EditContext editContext;

    protected override void OnInitialized()
    {
        editContext = new EditContext(choice);
    }

    // 你的搜索逻辑
    private async Task<IEnumerable<StateModel>> SearchAsync(string searchText)
    {
        var allStates = GetSampleStates();
        return allStates.Where(s => s.Name.Contains(searchText, StringComparison.OrdinalIgnoreCase));
    }

    // 你的CoerceValue逻辑
    private bool coerceValue(StateModel item)
    {
        return true;
    }

    // 模拟数据源
    private List<StateModel> GetSampleStates()
    {
        return new List<StateModel>
        {
            new() { Name = "California" },
            new() { Name = "Texas" },
            new() { Name = "New York" },
            new() { Name = "Florida" }
        };
    }

    // 替换为你实际的实体类
    public class StateModel
    {
        public string Name { get; set; }
    }

    public class ChoiceModel
    {
        public StateModel State { get; set; }
    }
}

关键细节:

  • 用@ref获取MudAutocomplete实例,通过autocompleteRef.Text拿到用户当前的搜索输入
  • ItemTemplate中,MudHighlighter的Text绑定下拉项的显示字段(如item.Name),SearchTerm绑定搜索文本
  • MudHighlighter默认忽略大小写匹配,可通过CaseSensitive="true"改为大小写敏感

方案二:手动实现高亮(无需额外组件)

如果不想依赖MudHighlighter,可手动处理字符串,用HTML标签包裹匹配内容后通过MarkupString渲染:

<ItemTemplate Context="item">
    @((MarkupString)HighlightMatch(item.Name, autocompleteRef.Text))
</ItemTemplate>

@code {
    private string HighlightMatch(string text, string searchTerm)
    {
        if (string.IsNullOrEmpty(searchTerm))
            return text;
        
        var regex = new Regex(Regex.Escape(searchTerm), RegexOptions.IgnoreCase);
        return regex.Replace(text, match => $"<span style='background: #ffeb3b;'>{match.Value}</span>");
    }
}

注意:

  • 使用MarkupString需确保内容安全,避免XSS风险,建议对用户输入和数据源文本做转义处理

内容的提问来源于stack exchange,提问作者Granoffel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 18:23:14