从 Blazor MudAutoComplete 选择项目

问题描述 投票:0回答:1

我正在尝试使用 MudAutoComplete 在数据库中搜索项目,正在搜索名称中的匹配项,应该在选择框中显示名称,但现在正在获取“SarisApplication.Data.AssessmentType”,它是我的模型

我的AutoComplete是这样的,现在正在后端绑定整个对象类我能够获取id

<MudAutocomplete T="AssessmentType" Label="Search Assessment Type"
                 ResetValueOnEmptyText="true"
                 Placeholder="Type to search assessment"
                 AdornmentIcon="@Icons.Material.Filled.Search" AdornmentColor="Color.Primary"
                 @bind-Value="SelectedAssessmentType" SearchFunc="SearchAssessmentType"
                 ShowProgressIndicator="true">
</MudAutocomplete>

代码

public partial class AddAsessmentDialog
{
    [CascadingParameter] MudDialogInstance? MudDialog { get; set; }

    [Parameter] public long CourseId { get; set; }

    public Assessment assessmentDetails = new();

    public AssessmentType SelectedAssessmentType = new();

    [Inject] public required AssessmentService AssessmentService { get; set; }
    [Inject] public required AssessmentTypeService AssessmentTypeService { get; set; }

    public bool IsVisible { get; set; }

    private async Task<IEnumerable<AssessmentType>> SearchAssessmentType(string searchTerm)
    {
        var response = await AssessmentTypeService.SearchAssessmentType(searchTerm);
        return response;
    }
    void Cancel() => MudDialog?.Cancel();

    MudForm? form;

    private async Task SubmitForm()
    {
        if (form != null)
        {
            await form.Validate();

            if (!form.IsValid)
            {
                return;
            }
            else
            {
                if(CourseId > 0)
                {
                    assessmentDetails.CourseId = CourseId;
                    assessmentDetails.AssessmentTypeId = SelectedAssessmentType.AssessmentTypeId;
                    assessmentDetails.IsVisible = IsVisible;
                    await AssessmentService.CreateAssessment(assessmentDetails);
                }
            }
        }
        else
        {
            /*sendinfo via message*/
        }
        MudDialog?.Close(DialogResult.Ok(true));
    }
}

我尝试在 MudAutoComplete 中设置以下代码,该代码在搜索时显示描述,选择后它会返回到我的模型的命名空间

 <ItemTemplate Context="assessment">
     <MudText>
         @assessment.AssessmentDescription
     </MudText>
 </ItemTemplate>

但我希望在选择时,它应该显示描述而不是命名空间,我知道为什么是命名空间,因为这就是我定义自动完成要保存的数据类型的方式,

我应该怎么做才能在搜索和选择时都显示描述值,但绑定所选的Id。

感谢您的帮助。

c# blazor .net-8.0 mudblazor
1个回答
0
投票

我已经找到解决办法了。在 MudAutoComplete 中呈现一个对象时,想要显示一个字符串?使用 ToStringFunc 参考这里

<MudAutocomplete T="AssessmentType" Label="Search Assessment Type"
                 ToStringFunc="@(e=> e==null?null : $"{e.AssessmentDescription}")"
                 ResetValueOnEmptyText="true"
                 Placeholder="Type to search assessment"
                 AdornmentIcon="@Icons.Material.Filled.Search" AdornmentColor="Color.Primary"
                 @bind-Value="assessmentDetails.AssessmentType" SearchFunc="SearchAssessmentType"
                 ShowProgressIndicator="true">
</MudAutocomplete>

问题就解决了

© www.soinside.com 2019 - 2024. All rights reserved.