Asp.net/C#:点击按钮时asp:FileUpload无PostedFiles但页面显示文件名
解决UpdatePanel内按钮无法获取外部FileUpload控件文件的问题
问题根源
UpdatePanel的异步局部回传默认不支持文件上传,且你的FileUpload控件不在UpdatePanel的ContentTemplate范围内,异步回传时浏览器不会将文件数据提交到服务器,导致后台PostedFiles为空。另外Visible="false"会让控件完全不生成HTML,浏览器无法处理文件选择操作,这也是潜在问题点。
解决方案
方案一:让按钮触发全页回传(简单直接)
给UpdatePanel添加PostBackTrigger,指定目标按钮触发全页回传,这样就能正常获取FileUpload的文件数据:
<asp:UpdatePanel ID="UpdatePanel18" runat="server"> <ContentTemplate> <asp:Button runat="server" ID="saveDraftButton" Text=" حفظ بيانات نموذج الإضافة مؤقتاً " OnClick="saveDraftButton_Click" CssClass="btn btn-outline btn-primary btn-lg btn-block" /> </ContentTemplate> <Triggers> <asp:PostBackTrigger ControlID="saveDraftButton" /> </Triggers> </asp:UpdatePanel>
同时修改FileUpload控件的隐藏方式(用CSS代替Visible="false"):
<asp:FileUpload ID="FileUpload1" AllowMultiple="true" runat="server" Style="display:none;" CssClass="form-control" />
方案二:使用AsyncFileUpload保持局部刷新
如果必须保留局部刷新,改用ASP.NET AJAX Toolkit的AsyncFileUpload控件,它专门支持异步环境下的文件上传:
- 确保项目引用ASP.NET AJAX Toolkit
- 替换原FileUpload控件:
<ajaxToolkit:AsyncFileUpload ID="AsyncFileUpload1" AllowMultiple="true" runat="server" Style="display:none;" CssClass="form-control" OnUploadedComplete="AsyncFileUpload1_UploadedComplete" />
- 在后台通过
AsyncFileUpload1_UploadedComplete事件获取文件,按钮点击事件可继续在异步回传中处理其他逻辑。
内容的提问来源于stack exchange,提问作者shahd
相关产品推荐
相关产品推荐

