我在我的Blazor服务器应用程序(代码-1)下面有剃须刀页面。在这张剃须刀页里,我有两个动态表。在第一个表中,列出了数控机床的数控AX名称(AX0...AX7)。如果用户单击轴名,则属于该轴的轴参数应列在第二个表中。结果,如果我单击任何轴名,我总是会得到第二个表中最后一个轴(AX7)的参数。
从二维CNC_AX_MD阵列中读取轴参数。我确信数组对于每个轴都有正确的值,因为如果我编写像Code-2这样的第一个表(下面),一切都很好。但是,轴的数量有时要比我的代码多得多,所以我不得不缩短代码。
我想我的表-1中的动态表结构与for循环有问题。有什么问题吗?我试过这个动作了。注释掉"StateHasChanged()“,但没有帮助。
代码-1
<table>
@{ for (int j = 0; j < 8; j++)
{
<tr>
<td @onclick='@(e => Select_CNC_AX_par(j))'>@CNC_AX_Names[j]</td>
</tr>
//StateHasChanged();
}
}
</table>
<table>
@{ for (int m = 0; m < arraylenght; m++)
{
<tr>
<td >CNC_AX_parameter[m]</td>
</tr>
}
}
</table>
public void Select_CNC_AX_par(int aksno)
{
for(int k=0; k < arraylenght;k++)
{
CNC_AX_parameter[k] = CNC_AX_MD[k, axno];
}
}代码-2
<table>
@{ <tr>
<td @onclick='@(e => Select_CNC_AX_par(0))'>@CNC_AX_Names[0]</td>
</tr>
<tr>
<td @onclick='@(e => Select_CNC_AX_par(1))'>@CNC_AX_Names[1]</td>
</tr>
<tr>
<td @onclick='@(e => Select_CNC_AX_par(2))'>@CNC_AX_Names[2]</td>
</tr>
<tr>
<td @onclick='@(e => Select_CNC_AX_par(3))'>@CNC_AX_Names[3]</td>
</tr>
<tr>
<td @onclick='@(e => Select_CNC_AX_par(4))'>@CNC_AX_Names[4]</td>
</tr>
<tr>
<td @onclick='@(e => Select_CNC_AX_par(5))'>@CNC_AX_Names[5]</td>
</tr>
<tr>
<td @onclick='@(e => Select_CNC_AX_par(6))'>@CNC_AX_Names[6]</td>
</tr>
<tr>
<td @onclick='@(e => Select_CNC_AX_par(7))'>@CNC_AX_Names[7]</td>
</tr>
}
</table>发布于 2022-08-29 07:46:57
尝试使用以下代码:
<table>
@{
for (int j = 0; j < 8; j++)
{
var Number = j;
<tr>
<td @onclick='@(e => Select_CNC_AX_par(Number))'>@j</td>
</tr>
//StateHasChanged();
}
}
</table>不要在lambda表达式中直接使用循环变量,如前面的for循环示例中的i。否则,所有lambda表达式都会使用相同的变量,这将导致在所有lambda中使用相同的值。
有关更多细节,您可以尝试参考官方的文档。
https://stackoverflow.com/questions/73525288
复制相似问题