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

如何用MudAutocomplete绑定复杂对象填充表单多字段?

解决方案:用MudAutocomplete同时填充两个表单字段

要实现同时填充AgencyName和AgencyIdentifier,你需要让MudAutocomplete绑定完整的AgencyLookupViewModel对象,而不是单独的字符串字段。以下是具体步骤和修改后的代码:


1. 定义临时绑定变量

在组件代码中添加一个用于绑定自动完成选中项的变量:

private AgencyLookupViewModel? SelectedAgency { get; set; }

2. 修改MudAutocomplete配置

更新组件的绑定方式,指定显示文本的规则,并添加选中项变更事件同步表单字段:

<EditForm Model="@ApplicationUser" OnValidSubmit="OnValidSubmit">
    <DataAnnotationsValidator />
    <MudDialog Style="width:550px;height:650px;">
        <DialogContent>
            <MudGrid>
                <MudItem xs="12">
                    <MudCard>
                        <MudCardContent>
                            <MudStack Row="true">
                                <MudStack Row="true">
                                    <MudAutocomplete Label="Agency" 
                                                     @bind-Value="@SelectedAgency" 
                                                     Required="true"
                                                     SearchFunc="@AgenciesAsync" 
                                                     Immediate="true"  
                                                     ResetValueOnEmptyText="true"
                                                     AdornmentIcon="@MudBlazor.Icons.Material.Filled.Search" 
                                                     AdornmentColor="MudBlazor.Color.Primary"
                                                     TextExpression="@(() => SelectedAgency?.AgencyName)"
                                                     TextGetter="@(item => item?.AgencyName ?? string.Empty)"
                                                     SelectedItemChanged="@OnAgencySelected"
                                                     For="@(() => ApplicationUser.AgencyName)" />

                                    <!-- 隐藏字段存储AgencyIdentifier,确保表单提交时能传递值 -->
                                    <MudHidden>
                                        <InputText @bind-Value="@ApplicationUser.AgencyIdentifier" />
                                    </MudHidden>
                                </MudStack>
                            </MudStack>
                        </MudCardContent>
                        <MudCardActions>
                            <div Class="pr-2">
                                <MudButton Variant="Variant.Filled" StartIcon="@MudBlazor.Icons.Material.Filled.Cancel" Color="MudBlazor.Color.Error" Size="MudBlazor.Size.Small" OnClick="Cancel" ButtonType="MudBlazor.ButtonType.Button">Cancel</MudButton>
                            </div>
                            <div Class="pr-2">
                                <MudButton Variant="Variant.Filled" StartIcon="@MudBlazor.Icons.Material.Filled.Save" Color="MudBlazor.Color.Success" Size="MudBlazor.Size.Small" ButtonType="MudBlazor.ButtonType.Submit">Save</MudButton>
                            </div>
                        </MudCardActions>
                    </MudCard>
                </MudItem>
            </MudGrid>
        </DialogContent>
    </MudDialog>
</EditForm>

3. 实现选中项同步逻辑

添加OnAgencySelected方法,在用户选择机构时同步更新ApplicationUser的两个字段:

private void OnAgencySelected(AgencyLookupViewModel? selectedItem)
{
    if (selectedItem != null)
    {
        ApplicationUser.AgencyName = selectedItem.AgencyName;
        ApplicationUser.AgencyIdentifier = selectedItem.AgencyIdentifier;
    }
    else
    {
        // 清空选择时重置字段
        ApplicationUser.AgencyName = string.Empty;
        ApplicationUser.AgencyIdentifier = Guid.Empty;
    }
}

4. 确认搜索函数正确性

你已经修改好的AgenciesAsync函数无需额外调整,确保它返回IEnumerable<AgencyLookupViewModel>即可:

private async Task<IEnumerable<AgencyLookupViewModel?>> AgenciesAsync(string value)
{
    var empty = Enumerable.Empty<AgencyLookupViewModel>();
    if (!String.IsNullOrEmpty(value) && value.Length > 0)
    {
        var agencies = await AgencyService.AgencyAutocompleteLookupAsync(value.Trim());
        var result = Mapper.Map<IEnumerable<AgencyDto>, IEnumerable<AgencyLookupViewModel>>(agencies);
        return result;
    }
    else
    {
        return empty;
    }
}

关键说明

  • TextExpression和TextGetter用于指定自动完成组件显示的文本内容(即机构名称)
  • SelectedItemChanged事件是核心逻辑入口,通过它可以在用户选择项时同步更新模型的多个字段
  • 隐藏的InputText确保AgencyIdentifier能被EditForm正确捕获并提交

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:13:16