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

AsyncFileUpload在用户控件UpdatePanel中引发回传致变量丢失求助

解决AsyncFileUpload在UpdatePanel中丢失公共变量的问题

我完全懂你的困扰——明明没触发常规回传,但公共变量connum却在上传时被清空了。这其实是因为AsyncFileUpload的上传请求本质上是一个独立的、不携带页面ViewState的异步HTTP请求,和你初始化connum的页面请求完全是两个上下文,所以你之前赋值的公共变量自然就丢失了。

下面给你几个可行的解决方案:

方案1:用Session存储connum

Session是跨请求保存数据的常用方式,适合这种场景:

  1. 初始化connum时,同时把它存入Session:
usercontrol1.connum = "200001"
Session("connum") = usercontrol1.connum
  1. 在FileUploadComplete事件中,从Session里读取值:
Public Sub FileUploadComplete(ByVal sender As Object, ByVal e As EventArgs)
    Dim connum As String = Session("connum").ToString()
    Dim FilePath As String = "\\ukwilv-as3\Aspray\" + connum + "\"
    Dim filename As String = System.IO.Path.GetFileName(AFU1.FileName)
    ' 确保目录存在,避免报错
    If Not System.IO.Directory.Exists(FilePath) Then
        System.IO.Directory.CreateDirectory(FilePath)
    End If
    AFU1.SaveAs(System.IO.Path.Combine(FilePath, filename))
End Sub

方案2:将connum存入AsyncFileUpload的自定义属性

AsyncFileUpload自带ExtraData属性,专门用来传递额外数据到上传事件:

  1. 在用户控件加载赋值时,设置控件的ExtraData:
usercontrol1.connum = "200001"
usercontrol1.AFU1.ExtraData = usercontrol1.connum
  1. 在上传事件中读取这个属性(注意要更换事件参数类型):
Public Sub FileUploadComplete(ByVal sender As Object, ByVal e As AjaxControlToolkit.AsyncFileUploadEventArgs)
    Dim connum As String = e.ExtraData
    Dim FilePath As String = "\\ukwilv-as3\Aspray\" + connum + "\"
    Dim filename As String = System.IO.Path.GetFileName(AFU1.FileName)
    If Not System.IO.Directory.Exists(FilePath) Then
        System.IO.Directory.CreateDirectory(FilePath)
    End If
    AFU1.SaveAs(System.IO.Path.Combine(FilePath, filename))
End Sub

方案3:用HiddenField保存并启用ViewState

如果不想依赖Session,可以在UpdatePanel里加一个HiddenField,把connum存在里面并启用ViewState:

  1. 修改用户控件的UpdatePanel代码:
<asp:UpdatePanel ID="up1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:HiddenField ID="hdnConnum" runat="server" EnableViewState="true" />
        <ajaxToolkit:AsyncFileUpload ID="AFU1" runat="server" OnUploadedComplete="FileUploadComplete" />
    </ContentTemplate>
</asp:UpdatePanel>
  1. 初始化connum时,同时给HiddenField赋值:
usercontrol1.connum = "200001"
usercontrol1.hdnConnum.Value = usercontrol1.connum
  1. 在上传事件中读取HiddenField的值:
Public Sub FileUploadComplete(ByVal sender As Object, ByVal e As EventArgs)
    Dim connum As String = hdnConnum.Value
    Dim FilePath As String = "\\ukwilv-as3\Aspray\" + connum + "\"
    Dim filename As String = System.IO.Path.GetFileName(AFU1.FileName)
    If Not System.IO.Directory.Exists(FilePath) Then
        System.IO.Directory.CreateDirectory(FilePath)
    End If
    AFU1.SaveAs(System.IO.Path.Combine(FilePath, filename))
End Sub

额外提示

  • 尽量用System.IO.Path.Combine()来拼接路径,避免因为斜杠问题导致的错误。
  • 一定要检查目标目录是否存在,否则保存文件时会抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:09:11