[ASP.NET] 解决因为使用 updatepanel 导致 fileupload 始终无法获取文件的方法

接手了一个新项目,需要在老项目中增添几个新页面

由于在母版页中的updatepanel包住了子版页

同时updatepanel并不支持文件上传,因此要额外增加一些设置

具体的情况可以参考这篇博客

https://www.cnblogs.com/insus/p/3208744.html

 

下面针对我自己的情况进行设置

 

前端控件的设置:

母版页的设置:

将 asp:ToolkitScriptManager 的 AjaxFrameworkMode 属性设置为 enabled 即可

1 <asp:ToolkitScriptManager ID="tsm" runat="server" AjaxFrameworkMode="Enabled" AsyncPostBackTimeout="1800" EnablePartialRendering="true" LoadScriptsBeforeUI="true" ScriptMode="Auto">asp:ToolkitScriptManager>

 

子版页的设置:

updatepanel要被包含在标签内,否则会出错(可能是我的框架太老或者其他原因)

额外的再在文件上传的控件外层套一个updatepanel,并将其updatemode设置为conditional

同时加入指向实现上传方法的控件,防止因为postback将文件给刷新掉从而获取不到文件

 1           <td class="td_title" >文件上傳td>
 2                 <td class="td_content" colspan="3">
 3                     
 4                     <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">                        
 5                         <ContentTemplate>
 6                             <asp:FileUpload ID="SQE_FileUpload" runat="server" /> 
 7                                                         
 8                         ContentTemplate>
 9                         <Triggers>
10                             <%--//可以指向模板外的控件,該功能是防止回傳刷新后導致獲取不到文件--%>
11                             <asp:PostBackTrigger ControlID="SIMP_submit" />
12                         Triggers>
13                     asp:UpdatePanel>
14                 td>

 

后端代码实现:

 1 //整個子版都處於updatepanel中,而updatepanel并不支持上傳,要另行設置,已設置完畢,具體參考aspx頁面
 2         protected void SQE_Uploadfiles()//將文件上傳的功能封裝在這裡進行調用即可
 3         {
 4             #region 上傳文件事件
 5             if (SQE_FileUpload.HasFile)//判斷有無文件
 6             {
 7                 string fileName = SQE_FileUpload.PostedFile.FileName;//獲取文件名
 8                 string fileType = fileName.Substring(fileName.LastIndexOf(".") + 1);//獲取文件類型
 9                 string SUPath = ConfigurationManager.AppSettings["SIMPUserUpload"].ToString().Replace("~/", "");//獲取服務器存放文件的路徑
10                 string Newfilefolder = Path.GetFullPath(SUPath + Abnormal_No.Text);//轉換成正確的文件夾路徑,..\Files\SIMPUserUpload\"流水號"
11                 string NewfileName = Abnormal_No.Text + "." + fileType;//文件名(流水號).(文件類型)
12                 string NewfilePath = Newfilefolder + "\\" + NewfileName;//在..\Files\SIMPUserUpload\"流水號"\文件夾中放入文件
13 
14                 if (!Directory.Exists(Newfilefolder))//檢查有無該文件夾,如果沒有就自動創建
15                 {
16                     try
17                     {
18                         Util.CreateDirectory(Newfilefolder);
19                     }
20                     catch (Exception x)
21                     {
22                         //ShowMessage("創建文件夾失敗!");
23                         UFstate = "1";
24                         return;
25                     }
26                 }
27 
28                 try
29                 {
30                     SQE_FileUpload.SaveAs(NewfilePath);//存儲文件到該路徑下
31                     //ShowMessage("上傳成功!");
32                     Fpath = NewfilePath;//回傳路徑
33                     return;
34                 }
35                 catch (Exception ex)
36                 {
37                     //ShowMessage("上傳失敗 !");
38                     UFstate = "2";
39                     return;
40 
41                 }               
42                 
43             }
44             else
45             {
46                 return;
47                 //ShowMessage("请选择要上传的文件!");
48                 //Response.Write("

请选择要上传的文件!

");
49 } 50 51 #endregion 52 }

 

你可能感兴趣的:([ASP.NET] 解决因为使用 updatepanel 导致 fileupload 始终无法获取文件的方法)