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

如何从Blazor @onclick方法中获取Receiver对象及循环File对象

Blazor @onclick同时获取点击目标与循环对象的解决方案

你的错误源于@onclick的lambda参数类型不匹配,Blazor中点击事件的默认参数应为MouseEventArgs,而非自定义的(object receiver, Action callback)。以下是正确实现方式:

1. Razor页面写法

在循环中,通过@onclick="e => OnRowClick(e, file)"同时传递点击事件参数和当前循环的file对象:

@foreach (var file in Files.OrderBy(a => a.Title))
{
    <tr class="@(file.Active ? "item-active" : "")" 
        @onclick="e => OnRowClick(e, file)">
        <!-- 行内示例元素 -->
        <td><input type="checkbox" /></td>
        <td>@file.Title</td>
    </tr>
}

2. 后台C#方法定义

在@code代码块中定义接收MouseEventArgs和file对象的方法,通过MouseEventArgs.Target获取实际点击的DOM元素:

@code {
    private List<FileModel> Files { get; set; } = new();

    private void OnRowClick(MouseEventArgs e, FileModel file)
    {
        // 获取实际点击的DOM元素
        var clickedElement = e.Target;
        
        // 可通过元素属性判断点击目标类型(比如是否是复选框)
        var isCheckbox = clickedElement.TagName.Equals("INPUT", StringComparison.OrdinalIgnoreCase) && 
                        clickedElement.GetAttribute("type") == "checkbox";

        // 同时使用循环中的file对象
        Console.WriteLine($"操作文件:{file.Title},点击目标:{clickedElement.TagName}");
    }

    // 示例文件模型类
    public class FileModel
    {
        public string Title { get; set; }
        public bool Active { get; set; }
    }
}

补充说明

  • MouseEventArgs.Target指向实际被点击的DOM元素,CurrentTarget则指向绑定事件的<tr>元素
  • 如果行内元素需要阻止触发行的点击事件(比如点击复选框时不触发行逻辑),可给该元素添加@onclick:stopPropagation="true"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:52:09