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

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>

关键改动说明

  1. 判断逻辑优化:用context == currentVariableSelected替代字段比较,基于对象引用判断选中行,避免字段修改导致的判断错误
  2. 组件保留不销毁:不管是否选中,都保留MudForm和TextField组件,只是动态切换:
    • 选中行时启用自定义验证逻辑localVariableValidator.ValidateValue
    • 非选中行时将Validation设为null,关闭验证
    • 仅选中行启用Immediate即时验证,非选中行保持普通输入状态

这样切换选中行时,组件不会被销毁重建,既保留了仅当前行验证的需求,也避免了上一个单元格“取消渲染”的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:40:44