Blazor Wasm - 无法从 'method group' 转换为 'EventCallback'

Blazor Wasm - cannot convert from 'method group' to 'EventCallback'

我有一个运行正常的简单 Blazor 服务器应用程序。

我正在尝试使用 Blazor WebAssembly 和 dotnet 5 创建一个等效的应用程序。

在工作应用程序中,我有一个 razor 组件,允许用户使用 BlazorFileUploader nuget 包上传文件

标记:

<InputFile multiple OnChange="HandleFileSelected"/>

后面的代码:

public async Task HandleFileSelected(IFileListEntry[] files)
        {
            if (!ValidateFiles(files, out _errorMsg))
            {
                return;
            }
etc...

当我尝试编译 wasm 应用程序时,出现以下错误

CS1503 参数 2:无法从 'method group' 转换为 'EventCallback'

知道我做错了什么吗?

我认为 OnChange 事件回调不支持 IFileListEntry[]

类型的参数

尝试将您的代码更改为:

public async Task HandleFileSelected(InputFileChangeEventArgs e)
{
    var files = e.GetMultipleFiles();
}

乔纳斯是正确的;您的方法需要接受 InputFileChangeEventArgs 而不是 IFileListEntry[]。如果您将鼠标悬停在 Visual Studio 2019 年的 OnChange 上,您应该会看到如下内容:

事件处理程序需要一个 delegate EventCallback,最多可以接受 1InputFileChangeEventArgs 类型的参数。将 delegate 视为方法接口:您的 IFileListEntry[] 声明与接口不匹配,因此您收到错误。

如果您检查 InputFileChangeEventArgs,您可以看到如何获取文件:

public async Task HandleFileSelected(InputFileChangeEventArgs args)
{
    IReadOnlyList<Microsoft.AspNetCore.Components.Forms.IBrowserFile> files =
        args.GetMultipleFiles(args.FileCount);
    // ...

感谢康纳和乔纳斯的回答。问题的原因是旧的 Blazor Server 应用程序是使用 .Net Core 3.1 构建的。 Microsoft.AspNetCore.Components.Forms 命名空间中不包含“InputFile”组件。这解释了为什么我求助于第 3 方“BlazorFileUploader”nuget 包。

在构建新的 Blazor WebAssembly 应用程序时,我选择了 dotnet 5。问题是,标记现​​在将“InputFile”解析为 Microsoft.AspNetCore.Components.Forms 命名空间而不是 BlazorFileUploader 命名空间。

因此,我可以通过以下两种方式之一进行修复:

  • 将标记完全限定为
  • 删除第 3 方 nuget 包并重构代码以使用 Microsoft 命名空间的 dotnet5 版本中现在可用的 InputFile 组件

我决定采用这两个选项中的秒数。