我使用的是MudBrazor,特别是MudSelect
。我想显示Name
属性,但将Id
属性保存在Value中。以下内容正在发挥作用。
<MudSelect T="int" Label="Assigned Group" Variant="Variant.Outlined" Required="true" RequiredError="An Assigned Group is required." @bind-Value="newTask.GroupId" AdornmentIcon="@Icons.Filled.Group">
@foreach (var group in Groups)
{
<MudSelectItem Value="@group.Id">@group.Name</MudSelectItem>
}
</MudSelect>
但是,随着选项的数量开始增长,在Select List
中添加一个搜索字段是有意义的。我不知道如何在MudSelect
中使用它。在使用MudAutocomplete
时,它给了我一个搜索功能,我不知道如何将Id
与所选的Name
关联起来。虽然,由于我的Name
是唯一的,我可以在submit
上进行一些处理以获得Id
,但我想防止额外的处理
据我所知,MudBlaczor在MudSelect中没有动态数据加载。
如前所述,您可以使用Virtualization MudBlazor为大量项目实现最大性能。
以下是MudSelect中具有大量数据的虚拟化示例。
他们似乎没有为MudSelect开发动态数据,不要等待(至少在接下来的几个月(。
更多信息:您还可以对表使用虚拟化,如下所示。
我改为自动完成,默认显示前十名,然后当用户键入时,列表自动过滤到包含输入文本的前十名。
<MudAutocomplete T="SM.Role"
Value="_employee.Role"
Label="Role"
SearchFunc="@EmployeeViewModel.SearchRole"
ResetValueOnEmptyText="@false"
CoerceText="@false"
DebounceInterval="500"
CoerceValue="@false"
ValueChanged="@OnRoleSelectionChanged"
AdornmentIcon="@Icons.Material.Filled.Search"
AdornmentColor="Color.Primary"
ToStringFunc="@(e => e == null ? null : $"{e.Name}")" />
您可以使用CodeBean.MudBlazor.Extensions包。它具有MudSelectExtended,并具有内置的搜索支持。它还具有类似搜索功能的MudComboBox。
可以在这里试试https://codebeam-mudextensions.pages.dev/mudselectextended
要在Blazor
应用程序中创建可搜索的MudSelect
组件,可以创建一个从MudSelect
继承并覆盖其FocusAsync()
方法的自定义组件。之后,您可以在此自定义组件中添加搜索输入。
步骤1:创建CustomMudSelect组件首先,创建一个新的Blazor组件并将其命名为CustomMudSSelect。在此组件中,从MudSelect继承并重写FocusAsync((方法。
步骤2:在CustomMudSelect内部添加搜索输入在组件的标记中包含搜索输入。这将使用户能够筛选MudSelect
组件中的项目。
<i>
public class CustomMudSelect<T>: MudSelect<T>
{
public override ValueTask FocusAsync()
{
return new ValueTask();
}
}
<CustomMudSelect T="int" Label="Assigned Group" Variant="Variant.Outlined"
Required="true" RequiredError="An Assigned Group is required."@bind-
Value="newTask.GroupId" AdornmentIcon="@Icons.Filled.Group">
<input class="form-control" placeholder="Search..."
@oninput="@((ChangeEventArgs e) => { searchText =
e.Value.ToString();
StateHasChanged();})"/>
@foreach (var group in Groups)
{
if (string.IsNullOrEmpty(searchText) ||
group.Name.Contains(searchText,
StringComparison.OrdinalIgnoreCase)
)
{
<MudSelectItem Value="@group.Id">@group.Name</MudSelectItem>
}
}
</CustomMudSelect>
</i>