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

使用MudDialog时子组件向父组件传递类数据失败问题

MudBlazor中子组件(弹窗)向父组件传递自定义类数据失败的解决方案

问题根源

你遇到的核心问题是子组件和父组件分别定义了同名的UserData类——这两个类虽然名称、结构完全一致,但属于不同的.NET类型(因所在组件类/命名空间隔离),导致父组件中wynik.Data as UserData因类型不匹配返回null,最终输出"empty :("。

解决方案

将UserData类提取到共享位置,让子组件和父组件引用同一个类型,而非各自定义。

步骤1:定义共享的UserData类

把类放到项目的共享目录(比如Models文件夹),确保子组件和父组件都能引用:

namespace YourProject.Models
{
    public class UserData
    {
        public DateTime wybranadata { get; set; }
    }
}

步骤2:修改子组件代码

引用共享的UserData类,保持弹窗提交逻辑不变:

using YourProject.Models;

private void Submit() {
    var data = new UserData
    {
        wybranadata = WybranaData,
    };

    MudDialog.Close(DialogResult.Ok(data));
}

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

步骤3:修改父组件代码

同样引用共享的UserData类,此时类型匹配,转换会成功:

using YourProject.Models;

// ...其他业务代码

var dane = await DialogService.ShowAsync<OknoDialogowe_Zatwierdzenie_Wybor_Daty>("Confirm", parameters);
var wynik = await dane.Result;

if (!wynik.Cancelled)
{
    var wyswietl = wynik.Data as UserData;
    if (wyswietl != null)
    {
        Console.WriteLine(wyswietl.wybranadata);
    }
    else
    {
        Console.WriteLine("empty :(");
    }
}

备选方案(不推荐,仅临时应急)

如果暂时无法提取共享类,可在父组件中使用强转替代as转换(前提是确定返回数据类型完全匹配):

if (!wynik.Cancelled)
{
    try
    {
        var wyswietl = (UserData)wynik.Data;
        Console.WriteLine(wyswietl.wybranadata);
    }
    catch (InvalidCastException)
    {
        Console.WriteLine("empty :(");
    }
}

内容的提问来源于stack exchange,提问作者Łukasz Maśliński

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:52:47