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

Blazor Web App保存文件到wwwroot时触发页面重载的问题求助

Blazor Web App保存文件到wwwroot时触发页面重载的问题求助

大家好,我最近在开发Blazor Web应用时遇到了一个头疼的问题,想请教下各位有没有解决思路。

我的应用需要从API接收完整的HTML文件,原本计划把这些文件存储到wwwroot/temp目录下,再通过<object>或者<iframe>来加载展示。但实际测试时发现,只要往wwwroot/temp目录写入新文件,整个Blazor页面就会自动重载,直接打断了正常的操作流程。

我猜测会不会是Blazor默认监听了wwwroot目录的文件变化,一旦检测到改动就触发页面重载?如果真是这样的话,我要么需要找到关闭这个监听的方法,要么得找一个能被前端访问但不会被Blazor监听的目录来存储临时文件。不过也有可能我的猜测完全错误,所以想请大家帮忙分析问题原因,或者给个可行的替代方案。

为了方便大家复现这个问题,我特意做了一个简化的示例项目,代码如下:

@page "/"

@using BlazorSaveHtmlDemo.Model

<PageTitle>Home</PageTitle>

<EditForm Model=Model OnValidSubmit=OnValidSubmit>
    <p>
        <label for="Filename">Filename:</label>
        <br />
        <InputText id="Filename" maxlength="32" @bind-Value=Model.Filename />
    </p>
    <p>
        <label for="Content">Content:</label>
        <br />
        <InputText id="Content" maxlength="32" @bind-Value=Model.Content />
    </p>
    <p>
        <button type="submit">Save</button>
    </p>
</EditForm>

@if (iFrameSrc is not null)
{
    <iframe src=@iFrameSrc style="width: 400px; height: 300px;"></iframe>
}

@code {
    private CreateHtmlFileModel Model = new();
    private String? iFrameSrc = null;

    private void OnValidSubmit()
    {
        var localPath = Path.Combine(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot"), "temp");
        if (!Directory.Exists(localPath)) Directory.CreateDirectory(localPath);

        var filename = Model.Filename + ".html";
        var localFile = Path.Combine(localPath, filename);

        File.WriteAllText(localFile, $@"
<html>
<head>
    <title>{Model.Filename}</title>
</head>
<body>
    {Model.Content}
</body>
</html>
        ");

        iFrameSrc = "/wwwroot/temp/" + filename;
    }
}

备注:内容来源于stack exchange,提问作者Christian B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 08:09:35