【问题标题】:Send dynamic parameters on click with Blazor [duplicate]使用 Blazor 单击时发送动态参数 [重复]
【发布时间】:2020-11-09 01:46:43
【问题描述】:

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

所有非常基本的东西,似乎按预期工作。但是,我正在努力将参数 rc 传递给ChangeColor,因为&lt;div&gt; 元素也是由代码生成的,就像这样(灵感来自this post ):

<div class="grid">
@for (int r = 0; r < 10; r++) {
    <div class="row">
    @for (int c = 0; c < 10; c++) {
        <div class="box"><div class="inner" style="background-color: @(GetColor(r,c));" @onclick="() => ChangeColor(r, c)">@((r*10+c).ToString())</div></div>
    }
    </div>
}
</div>

我以为 rc 会得到它们在生成时的值,但它们总是 10(它们停止的值,在for 循环)。

有什么办法可以“存储” rc 到元素并在我的onclick 事件中使用它?

【问题讨论】:

    标签: c# blazor blazor-server-side


    【解决方案1】:

    它被称为“捕获循环变量”,谷歌。 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>
        }
    

    【讨论】:

    • 我总是喜欢简单的答案。非常感谢,它工作得很好:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多