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

Blazor中MudAutocomplete为空点击确认报错的解决方案问询

解决MudAutocomplete空对象导致的按钮点击错误问题

要解决这个问题,核心是直接判断绑定的elemecik对象是否为空,同时结合MudAutocomplete的验证状态来控制按钮禁用,具体操作如下:

1. 控制按钮禁用状态

将确认按钮的Disabled属性修改为判断elemecik是否为空,再结合组件的验证状态,确保只有选择了有效选项时按钮才可用:

<MudButton Variant="Variant.Filled" StartIcon="@Icons.Material.Filled.Save" Color="Color.Primary" OnClick="Replace" Disabled="@(elemecik == null || !RefEntryField.IsValid)">Zamień</MudButton>
  • elemecik == null:直接判断绑定的对象是否为空,没有选择匹配项时elemecik会保持null
  • !RefEntryField.IsValid:结合组件的Required验证,确保输入框符合必填要求

2. 给Replace方法加空判断(双重保险)

即使按钮禁用被绕过,在执行核心逻辑前先检查elemecik是否为空,避免空引用错误:

private async Task Replace()
{
    if (elemecik == null) return; // 空对象直接返回,不执行后续逻辑
     
    oS.UPDATEReplace(srcdoc, id, elemecik.Nazwa_ERPXL, elemecik.indeks_compApps, elemecik.jednostka_compApps, elemecik.ilosc_compApps, elemecik.gid_numer_compApps, elemecik.magazyn, elemecik.regal, elemecik.polka, elemecik.indeks_compApps,tmp_elemecik.indeks_compApps);
    Submit();
}

完整修改后的代码片段

Razor部分

<MudDialog>
    <DialogContent>
         <MudItem >
            <MudPaper Class="pa-4">
                <MudAutocomplete Required="true" RequiredError="Pole muis być uzupełnione!" @ref="RefEntryField" T="OptymalizationModels" Label="Indeks - Nazwa Towaru" @bind-Value="elemecik" SearchFunc="@Search2" ToStringFunc="@(e=> e==null?null : $"{e.indeks_compApps} - {e.Nazwa_ERPXL}")" ShowProgressIndicator="true" ProgressIndicatorColor="Color.Default" CoerceText="true" ResetValueOnEmptyText="false" />
            </MudPaper>
        </MudItem>
    </DialogContent>
    <DialogActions>
        <MudButton Variant="Variant.Filled"  Color="Color.Error" OnClick="Cancel">Anuluj</MudButton>
        <MudButton Variant="Variant.Filled" StartIcon="@Icons.Material.Filled.Save" Color="Color.Primary" OnClick="Replace" Disabled="@(elemecik == null || !RefEntryField.IsValid)">Zamień</MudButton>
    </DialogActions>    
</MudDialog>

C#代码部分

IEnumerable<OptymalizationModels> lista;
OptymalizationModels elemecik;
OptymalizationModels tmp_elemecik;
[CascadingParameter] MudDialogInstance MudDialog { get; set; }
[Parameter] public int id { get; set; }
[Parameter] public int srcdoc { get; set; }
private MudAutocomplete<OptymalizationModels> RefEntryField;

protected override async Task OnInitializedAsync()
{
    tmp_elemecik = new OptymalizationModels();
    lista = await Task.Run(() => oS.GetListOkucInWarehouse());
    tmp_elemecik = await Task.Run(() => oS.GetONEOkucia(srcdoc, id));
}

private async Task<IEnumerable<OptymalizationModels>> Search2(string value)
{
    await Task.Delay(1000);
    if (string.IsNullOrEmpty(value))
        return lista;
    return lista.Where(x => x.Nazwa_ERPXL.Contains(value, StringComparison.InvariantCultureIgnoreCase) || x.indeks_compApps.Contains(value, StringComparison.InvariantCultureIgnoreCase));
}

void Submit() => MudDialog.Close(DialogResult.Ok(true));
void Cancel() => MudDialog.Cancel();

protected override async Task OnAfterRenderAsync(bool firstRender)
{
    if (firstRender) { await RefEntryField.FocusAsync(); }
}

private async Task Replace()
{
    if (elemecik == null) return;
    oS.UPDATEReplace(srcdoc, id, elemecik.Nazwa_ERPXL, elemecik.indeks_compApps, elemecik.jednostka_compApps, elemecik.ilosc_compApps, elemecik.gid_numer_compApps, elemecik.magazyn, elemecik.regal, elemecik.polka, elemecik.indeks_compApps,tmp_elemecik.indeks_compApps);
    Submit();
}

这样修改后,当用户没有选择任何匹配项时,elemecik会保持null,按钮会被禁用,同时Replace方法里的空判断也能防止意外的空引用错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:25:20