C# 使用Blazor单击时发送动态参数
我正在尝试创建一个红色正方形的网格(10 x 10)。每个方块都是一个C# 使用Blazor单击时发送动态参数,c#,blazor,blazor-server-side,C#,Blazor,Blazor Server Side,我正在尝试创建一个红色正方形的网格(10 x 10)。每个方块都是一个元素,具有@onclick功能。单击某个元素时,该元素的颜色应更改为红色。我使用以下代码成功地将每个元素的背景绑定到一个方法,该方法返回一种颜色: @code{ private string[,] _colors = new string[10,10]; protected override void OnInitialized() { for(int r = 0; r < _color
元素,具有@onclick
功能。单击某个元素时,该元素的颜色应更改为红色。我使用以下代码成功地将每个元素的背景绑定到一个方法,该方法返回一种颜色:
@code{
private string[,] _colors = new string[10,10];
protected override void OnInitialized() {
for(int r = 0; r < _colors.GetLength(0); r++) {
for(int c = 0; c < _colors.GetLength(1); c++) {
_colors[r, c] = "#FF0000";
}
}
}
private void ChangeColor(int r, int c) {
_colors[r,c] = "#0000FF";
}
public string GetColor(int r, int c) {
return _colors[r,c];
}
}
我以为r和c会得到它们在生成时的值,但是它们总是10(它们在for循环之后停止的值)
我有没有办法“储存”
在我的
onclick
事件中使用它?它被称为“捕获循环变量”,谷歌就是这样。Lambda循环和for循环不太协调
快速修复方法是复制:
@for (int r = 0; r < 10; r++) {
int rr = r;
<div class="row">
@for (int c = 0; c < 10; c++) {
int cc = c;
<div class="box"><div class="inner" style="background-color: @(GetColor(r,c));" @onclick="() => ChangeColor(rr, cc)">@((r*10+c).ToString())</div></div>
}
(int r=0;r<10;r++){
int-rr=r;
@对于(int c=0;c<10;c++){
int cc=c;
@((r*10+c).ToString())
}
我一直喜欢一个简单的答案。非常感谢,它非常有效:-)
@for (int r = 0; r < 10; r++) {
int rr = r;
<div class="row">
@for (int c = 0; c < 10; c++) {
int cc = c;
<div class="box"><div class="inner" style="background-color: @(GetColor(r,c));" @onclick="() => ChangeColor(rr, cc)">@((r*10+c).ToString())</div></div>
}