MudBlazor Dialog控件抛出System.InvalidCastException异常,求调试帮助
MudBlazor Dialog 抛出 InvalidCastException 问题排查
错误信息
System.InvalidCastException: Specified cast is not valid.
at Microsoft.AspNetCore.Components.Reflection.PropertySetter.CallPropertySetter[GolfReg,List1](Action2 setter, Object target, Object value)
at Microsoft.AspNetCore.Components.Reflection.PropertySetter.SetValue(Object target, Object value)
at Microsoft.AspNetCore.Components.Reflection.ComponentProperties.<SetProperties>g__SetProperty|3_0(Object target, PropertySetter writer, String parameterName
相关代码
var parameters = new DialogParameters(); var playersToEdit = new List<GolfPreReg>(); var partner = PlayingField.Where(p => p.ID == SelectedPlayer.Last().ID && p.GolfDayYear == DateTime.Now.Year).ToList(); playersToEdit.Add(SelectedPlayer.Last()); var options = new MudBlazor.DialogOptions(); if (playersToEdit.Count == 2) { var partnerToAdd = partner.FirstOrDefault(pta => pta.ID != SelectedPlayer.Last().ID); playersToEdit.Add(partnerToAdd!); options = new MudBlazor.DialogOptions { MaxWidth = MaxWidth.Large }; } else { options = new MudBlazor.DialogOptions { MaxWidth = MaxWidth.Small }; } parameters.Add("PlayFieldEdit", playersToEdit); try { var dialog = await DialogService.Show<GolfReg>("Edit player group", parameters, options).Result;
问题根源
这个错误的核心是Dialog传递的参数类型,与弹窗组件GolfReg中对应属性的类型不匹配。你传入的是List<GolfPreReg>,但GolfReg里的PlayFieldEdit属性类型大概率和这个不一致。
常见的不匹配场景:
GolfReg的PlayFieldEdit定义为List<GolfReg>(不是GolfPreReg)- 属性是单个
GolfPreReg对象,而非集合类型 - 属性未标记
[Parameter]特性,或者访问修饰符不是public
解决方案
- 检查
GolfReg组件的PlayFieldEdit属性定义,确保:- 类型严格匹配
List<GolfPreReg> - 带有
[Parameter]特性,且为public
示例正确定义:
[Parameter] public List<GolfPreReg> PlayFieldEdit { get; set; } = new(); - 类型严格匹配
- 确认参数键名
"PlayFieldEdit"和组件属性名完全一致(C#是大小写敏感的) - 后续可以排查
partnerToAdd!的空值风险,但当前异常由类型转换导致,优先处理前两点
内容的提问来源于stack exchange,提问作者STRD003
相关产品推荐
相关产品推荐

