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

如何解决AsyncFileUpload控件无法读取TXT文件内容的问题?

解决AsyncFileUpload上传后无法更新TextBox内容的问题

问题核心原因

AsyncFileUpload的OnUploadedComplete事件是在独立的异步HTTP请求中触发的,这个请求和主页面的生命周期完全分离。后台代码中对TextBox1.Text的赋值只会作用于该异步请求的上下文,不会自动同步到主页面的DOM元素上,所以你看不到文本框内容更新。

解决方案

通过后台注册客户端脚本,直接在前端更新TextBox的内容:

1. 修改后台事件代码

使用ScriptManager.RegisterClientScriptBlock方法,将读取到的文件内容以客户端脚本的形式发送到前端,直接赋值给TextBox:

using System.IO;
using System.Text;
using System.Web.Script.Serialization;
using AjaxControlToolkit;

protected void UpLoad_Button_Click(object sender, AsyncFileUploadEventArgs e)
{
    string extension = Path.GetExtension(e.FileName);
    // 不区分大小写判断文件类型
    if (extension.Equals(".txt", StringComparison.OrdinalIgnoreCase))
    {
        string fileContent = string.Empty;
        // 使用using自动释放StreamReader资源
        using (StreamReader reader = new StreamReader(e.FileContent, Encoding.UTF8))
        {
            fileContent = reader.ReadToEnd();
        }
        // 序列化内容避免JS语法错误(比如换行、引号)
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        string serializedContent = serializer.Serialize(fileContent);
        // 注册客户端脚本更新TextBox
        ScriptManager.RegisterClientScriptBlock(
            this, 
            GetType(), 
            "updateTextBox", 
            $"document.getElementById('{TextBox1.ClientID}').value = {serializedContent};", 
            true
        );
    }
    else
    {
        // 可选:提示文件类型错误
        ScriptManager.RegisterClientScriptBlock(
            this, 
            GetType(), 
            "fileError", 
            "alert('仅支持上传TXT格式文件');", 
            true
        );
    }
}

2. 前端控件调整(可选)

可以给AsyncFileUpload添加客户端上传完成事件,做额外的前端提示:

<ajaxToolkit:AsyncFileUpload ID="AsyncFileUpload1" runat="server" 
    OnUploadedComplete="UpLoad_Button_Click"
    OnClientUploadComplete="onUploadComplete" />

<script type="text/javascript">
    function onUploadComplete(sender, args) {
        // 上传完成后的前端提示,比如:
        // alert('文件上传并解析完成');
    }
</script>

关键注意事项

  • 页面必须包含ScriptManager控件(AjaxControlToolkit控件依赖它)
  • 必须使用控件的ClientID获取前端元素,避免因母版页/命名容器导致的ID变化
  • 对文件内容进行序列化处理,防止特殊字符(如换行、双引号)破坏JS语法
  • 使用using语句包裹StreamReader,确保IO资源被正确释放

内容的提问来源于stack exchange,提问作者Laurent

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:43:00