我的模型看起来像这样
public partial class EditModel
{
public int Id { get; set; }
...
public string Item { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的 SearchItems 方法标头如下所示
protected async Task<IEnumerable<ListItem>> SearchItems(string value)
Run Code Online (Sandbox Code Playgroud)
返回这些的“列表”
public partial class ListItem
{
public string Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如何让 MudAutocomplete 显示名称,同时返回/绑定 ID?
<MudAutocomplete T="ListItem" Label="Select item" @bind-Value="EditModel.Item"
Clearable="true"
MinCharacters="4" SearchFunc="@SearchItems"
ToStringFunc="@(i => i==null ? null : $"{i.Id} [{i.Name}]")"
SelectValueOnTab="true"/>
Run Code Online (Sandbox Code Playgroud)
在 @bind-Value 上,Visual studio 显示此错误
...无法从“字符串”转换为“EditModel.Item”
这就是我现在解决它的方法...
我的 SearchItems 方法现在只返回字符串列表
protected async Task<IEnumerable<string>> SearchItems(string value)
Run Code Online (Sandbox Code Playgroud)
我已将此属性放入 MudAutocomplete 中
ToStringFunc="@(i => ItemDisplay(i))"
Run Code Online (Sandbox Code Playgroud)
这是我的 ItemDisplay 方法
private string ItemDisplay(string itemId)
{
var item = ListItems.FirstOrDefault(i => i.Id == itemId);
return item == null ? "!Not Found!" : $"{item.Id} [{item.Name}]";
}
Run Code Online (Sandbox Code Playgroud)
我必须将其添加到我的 ComponentBase 中,以“缓存”所有 ListItems 以供在 ItemDisplay() 方法中使用:
public List<ListItem> ListItems { get; set; } = new();
Run Code Online (Sandbox Code Playgroud)
在OnInitializedAsync()中
ListItems = await MyService.GetItemsAsync();
Run Code Online (Sandbox Code Playgroud)
我已将 GetItemsAsync() 设置为使用 IMemoryCache (Microsoft.Extensions.Caching.Memory),但我仍然不喜欢这种方法。我很难相信这个组件不支持该功能。
小智 6
也许该组件已更新,但我能够通过使用以下我认为很好的方法来实现这一目标。
您要使用的型号
record State(Guid Id, string Name);
Run Code Online (Sandbox Code Playgroud)
绑定值
private State value1;
Run Code Online (Sandbox Code Playgroud)
搜索功能返回IEnumerable<State>
private async Task<IEnumerable<State>> Filter(string value)
{
// Filtering logic
}
Run Code Online (Sandbox Code Playgroud)
最后,我用来ToStringFunc定义值在下拉列表中的显示方式
<MudAutocomplete T="State" ToStringFunc="@(state => state.Name)" Label="US States" @bind-Value="value1" SearchFunc="@Filter" Variant="Variant.Outlined"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6262 次 |
| 最近记录: |