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

如何在MudBlazor子对话框中结合自定义类使用[CascadingParameter]

问题解决:Blazor/MudBlazor对话框传递自定义类参数失败

错误原因

报错提示明确指出:子组件RiverDingoInvoiceEdit的DataBlazor属性未标记[Parameter]、[CascadingParameter]等参数特性,Blazor无法识别该属性为可接收外部传入的参数,导致参数传递失败。

修复步骤

1. 修正子组件的参数标记

修改RiverDingoInvoiceEdit.razor.cs,给DataBlazor属性添加[Parameter]特性,并设置为公共属性(Blazor组件参数必须为public):

public partial class RiverDingoInvoiceEdit
{
    // 添加[Parameter]特性,改为public
    [Parameter]
    public rMidiDataBlazor DataBlazor { get; set; }

    [CascadingParameter] 
    IMudDialogInstance MudDialog { get; set; }

    // 可选:初始化时做空值检查,避免空引用异常
    protected override void OnInitialized()
    {
        // 若父组件未传值,初始化一个空实例
        DataBlazor ??= new rMidiDataBlazor();
    }
}

2. (可选)避免直接修改父组件原数据

rMidiDataBlazor是引用类型,父组件传递的是对象引用,子组件修改DataBlazor的属性会直接影响父组件的原对象。如果需要实现「取消编辑不保留修改」的逻辑,可利用你的ShallowCopy方法创建本地副本:

public partial class RiverDingoInvoiceEdit
{
    private rMidiDataBlazor _localData;

    [Parameter]
    public rMidiDataBlazor DataBlazor { get; set; }

    [CascadingParameter] 
    IMudDialogInstance MudDialog { get; set; }

    protected override void OnInitialized()
    {
        // 创建本地副本,修改不会影响原对象
        _localData = DataBlazor?.ShallowCopy() ?? new rMidiDataBlazor();
    }

    private void Submit()
    {
        // 提交时将本地副本返回给父组件
        MudDialog.Close(DialogResult.Ok(_localData));
    }

    private void Cancel()
    {
        MudDialog.Cancel();
    }
}

同时修改子组件razor文件中的绑定对象为_localData:

<MudTextField T="string" Label="Invoice Title:" @bind-Value="_localData.Field2" Variant="Variant.Text" MaxLength="50"
              Required="true" RequiredError="You must supply an Invoice Title" />
<MudTextField T="string" Label="Cost:" @bind-Value="_localData.Field4" Variant="Variant.Text" MaxLength="7"
              Required="true" RequiredError="You must supply an Invoice Cost"
              Mask="@(new PatternMask("0000.00"))" />
<MudDatePicker Label="Invoice Date" @bind-Value="_localData.Field3" AutoClose="true" />
<MudTextField T="string" Label="Notes:" @bind-Value="_localData.Field5" Variant="Variant.Text" MaxLength="250" Lines="6"></MudTextField>

3. 父组件接收修改后的数据(可选)

如果使用了本地副本,父组件可接收返回的更新数据:

var Result = await DialogReference.Result;

if (!Result.Canceled)
{
    var updatedData = Result.Data as rMidiDataBlazor;
    // 此处可根据updatedData更新数据源
    this.GetRiverDingoData();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 19:34:53