You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将按钮值传入onclick事件?解决循环中i值异常问题

问题原因及解决方法

问题根源

你遇到的是闭包捕获变量引用的问题:for循环里的i是同一个变量,所有按钮的点击事件lambda表达式捕获的是这个变量的引用,而非循环时的具体值。当循环结束后,i的值已经变成maxPage + 1(也就是6),所以点击任何按钮都会调用dosomething(6)。另外代码里this.value是字符串类型,而dosomething参数是int,类型不匹配会直接导致崩溃。

解决方法

在循环内部创建一个局部变量,保存当前循环的i值,让每个lambda表达式捕获这个局部变量的副本,就能拿到对应按钮的正确数值。同时直接传递这个局部变量给方法,避免类型转换问题。

修正后的代码:

@for (int i = 1; i < maxPage + 1; i++)
{
    // 创建局部变量保存当前i的值
    var currentPage = i;
    <button @onclick="@(() => dosomething(currentPage))">@currentPage</button>
}

@code {
    int maxPage = 5;
 
    private void dosomething(int val)
    {
        Console.WriteLine(val);
    }
}

补充说明

如果一定要用按钮的value属性传递值,需要将字符串类型的value转换为int,同时同样要捕获局部变量,代码示例:

@for (int i = 1; i < maxPage + 1; i++)
{
    var currentPage = i;
    <button value="@currentPage" @onclick="@(e => dosomething(int.Parse(e.CurrentTarget.Value)))">@currentPage</button>
}

@code {
    int maxPage = 5;
 
    private void dosomething(int val)
    {
        Console.WriteLine(val);
    }
}

内容的提问来源于stack exchange,提问作者Lisa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:42:12