带有事件的代码中的 Blazor 可重用 RenderFragments:无法将 lambda 表达式转换为预期的委托类型

Blazor Reusable RenderFragments in code with event : Cannot convert lambda expression to intended delegate type

有人知道为什么下面的方法不起作用吗?如果我删除“onclick”事件,那么它会按预期编译和工作。是否不允许我们在 Reusable RenderFragments 内使用事件?

环境:ASP.NET Core 3.1 和 Blazor Web Assembly

非常感谢您的提前帮助!

无法将 lambda 表达式转换为预期的委托类型,因为块中的某些 return 类型不能隐式转换为委托 return 类型

@code {
    RenderFragment<(CategoryDto category, int myId)> rf =
      val => __builder =>
      {
        <h1 @onclick="()=> Console.WriteLine(val.category.Name)">Hello @val.category.Name, @val.myId</h1>
      };
}

代码中的@onclick 处理程序最终将由 EventCallbackFactory 创建。但是,该工厂需要对字段初始值设定项不支持的 'this' 的引用 - 因此您会收到此错误(可能还有另一个关于 'this' 的错误)。

解决方法很简单。您只需要像这样将字段变成 属性:

RenderFragment<(CategoryDto category, int myId)> rf => val => __builder =>
{
    <h1 @onclick="() => Console.WriteLine(val.category.Name)">Hello @val.category.Name, @val.myId</h1>
};