C# Blazor Wasm-无法从';方法组';至';事件回调&x27;
我有一个简单的Blazor服务器应用程序,运行正常 我正在尝试使用Blazor WebAssembly和dotnet 5创建一个等效的应用程序 在工作应用程序中,我有一个razor组件,允许用户使用nuget包上传文件 标记: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” 知道我做错
<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...