带有事件的代码中的 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>
};
有人知道为什么下面的方法不起作用吗?如果我删除“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>
};