Blazor Server端循环绑定输入框回车后清空,数据绑定问题排查
问题原因及解决方案
你的问题出在Blazor循环绑定中的变量捕获机制:for循环的变量i是全局共享的,所有输入框的绑定表达式最终都会引用循环结束后的i值(也就是10),导致实际绑定的是PLC_VAR_name[10],而非你预期的PLC_VAR_name[0]到PLC_VAR_name[9]。当按下回车触发组件重新渲染时,循环重新执行,输入框显示的是未被修改的PLC_VAR_name[0]到PLC_VAR_name[9],看起来就像输入内容被清空了。
修复方案一:用局部变量捕获循环索引
在循环内部声明局部变量保存当前i值,确保每个输入框绑定到正确的数组索引:
@for (int i = 0; i < 10; i++) { var index = i; // 关键:捕获当前循环的索引值 <tr height="30px"> <td class="td_DiagBuff_data" width="200"> <input type="text" @bind="@PLC_VAR_name[index]"/></td> </tr> } @code { public string[] PLC_VAR_name { get; set; } = new string[99]; }
修复方案二:改用foreach循环遍历索引
通过Enumerable.Range生成独立的索引序列,用foreach循环遍历,每个迭代的索引都是独立实例:
@foreach (var index in Enumerable.Range(0, 10)) { <tr height="30px"> <td class="td_DiagBuff_data" width="200"> <input type="text" @bind="@PLC_VAR_name[index]"/></td> </tr> } @code { public string[] PLC_VAR_name { get; set; } = new string[99]; }
两种方案都能让输入框正确绑定到对应数组元素,输入内容后回车就不会再出现清空问题。
内容的提问来源于stack exchange,提问作者Mdarende
相关产品推荐
相关产品推荐

