Blazor/MudBlazor表格内字段验证异常问题求助
解决MudBlazor表格Td内TextField验证的行切换问题
问题根源
你之前的写法会在切换选中行时销毁原选中行的MudForm组件,重新渲染不带验证的TextField——虽然数据绑定到了行对象所以后台数据保留,但组件实例被替换,导致“取消渲染”的视觉/状态变化。另外用VariableName判断选中行也有隐患,如果有重名变量,判断逻辑会失效。
修复方案
不用销毁重建组件,而是统一保留MudForm结构,动态控制验证逻辑是否生效,同时改用对象引用判断选中行:
<MudTd> <MudForm Model="@context" Validation="@(context == currentVariableSelected ? localVariableValidator.ValidateValue : null)" ValidationDelay="500"> <MudTextField @bind-value="@context.VariableName" For="@(() => context.VariableName)" Immediate="@(context == currentVariableSelected)" DisableUnderLine="true" Class="mt-n3" T="string" TextChanged="@((string name) => OnLocalVariableNameChanged(name, context))"> </MudTextField> </MudForm> </MudTd>
关键改动说明
- 判断逻辑优化:用
context == currentVariableSelected替代字段比较,基于对象引用判断选中行,避免字段修改导致的判断错误 - 组件保留不销毁:不管是否选中,都保留
MudForm和TextField组件,只是动态切换:- 选中行时启用自定义验证逻辑
localVariableValidator.ValidateValue - 非选中行时将
Validation设为null,关闭验证 - 仅选中行启用
Immediate即时验证,非选中行保持普通输入状态
- 选中行时启用自定义验证逻辑
这样切换选中行时,组件不会被销毁重建,既保留了仅当前行验证的需求,也避免了上一个单元格“取消渲染”的问题。
内容的提问来源于stack exchange,提问作者BobbyB
相关产品推荐
相关产品推荐

