C# Blazor Wasm-无法从';方法组';至';事件回调&x27;

C# Blazor Wasm-无法从';方法组';至';事件回调&x27;,c#,blazor,.net-5,blazor-webassembly,blazor-client-side,C#,Blazor,.net 5,Blazor Webassembly,Blazor Client Side,我有一个简单的Blazor服务器应用程序,运行正常 我正在尝试使用Blazor WebAssembly和dotnet 5创建一个等效的应用程序 在工作应用程序中,我有一个razor组件,允许用户使用nuget包上传文件 标记: <InputFile multiple OnChange="HandleFileSelected"/> 当我试图编译wasm应用程序时,我得到以下错误 CS1503参数2:无法从“方法组”转换为“EventCallback” 知道我做错

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

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

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

标记:

<InputFile multiple OnChange="HandleFileSelected"/>
当我试图编译wasm应用程序时,我得到以下错误

CS1503参数2:无法从“方法组”转换为“EventCallback”


知道我做错了什么吗?

我认为
OnChange
eventcallback不支持
IFileListEntry[]类型的参数

尝试将代码更改为:

已选择公共异步任务句柄文件(InputFileChangeEventArgs e)
{
var files=e.GetMultipleFiles();
}

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

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

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

public async Task HandleFileSelected(InputFileChangeEventArgs args args)
{
IReadOnlyList文件=
args.GetMultipleFiles(args.FileCount);
// ...

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

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

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

  • 将标记完全限定为
    public async Task HandleFileSelected(IFileListEntry[] files)
            {
                if (!ValidateFiles(files, out _errorMsg))
                {
                    return;
                }
    etc...