使用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
相关产品推荐
相关产品推荐

