C# 使用Blazor单击时发送动态参数

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

我正在尝试创建一个红色正方形的网格(10 x 10)。每个方块都是一个
元素,具有
@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>
    }