You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI Razor中FilePicker选文件后文本框不实时显示路径的解决方法

问题解决方法

你的问题出在异步方法的返回值类型上:Blazor中如果事件处理方法用async void,异步操作完成后不会自动触发组件的UI更新,所以你选择文件后filePath已经赋值,但界面没刷新;再次点击按钮时触发了组件渲染,才会显示出之前设置的路径。

修复方案(推荐)

把OpenFileAsync的返回类型从async void改成async Task,Blazor会自动在异步操作完成后处理UI更新:

<div>
    <label for="inputdata">Input Data:</label>
    <input type="text" name="inputdata" value="@filePath" />
    <button @onclick="OpenFileAsync">Open</button>
</div>

@code {
    private string filePath;

    // 把async void改成async Task
    public async Task OpenFileAsync()
    {
        var customFileType = new FilePickerFileType(
            new Dictionary<DevicePlatform, IEnumerable<string>>
            {
                { DevicePlatform.WinUI, new[] { "jpg" } },
            }
        );

        PickOptions options = new()
        {
            PickerTitle = "Please select a comic file",
            FileTypes = customFileType,
        };
        var result = await FilePicker.Default.PickAsync(options);
        if (result != null)
        {
            filePath = result.FullPath;
        }
    }
}

备选方案(手动触发更新)

如果因为某些原因必须保留async void,可以在给filePath赋值后手动调用StateHasChanged()通知组件更新UI:

// 在赋值后添加这一行
if (result != null)
{
    filePath = result.FullPath;
    StateHasChanged();
}

内容的提问来源于stack exchange,提问作者Üh Lieh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 09:42:37