【问题标题】:FileUpload.HasFile returns "False" for multiple files upload - ASP.netFileUpload.HasFile 为多个文件上传返回“False” - ASP.net
【发布时间】:2017-04-23 07:42:20
【问题描述】:

我正在使用 ASP.net FileUpload 控件在数据库中上传多个文件。

<asp:UpdatePanel ID="UP_div_askQ" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
        <asp:FileUpload ID="FUQuestionFiles" CssClass="form-control" AllowMultiple="true" runat="server" />
        <asp:Button ID="btnQSave" runat="server" CssClass="btn btn-success" Text="ASK QUESTION" OnClick="askQuestion" />
    </ContentTemplate>
    <Triggers>
        <asp:PostBackTrigger ControlID="btnQSave" />
    </Triggers>
</asp:UpdatePanel>

在后面的代码中,我使用HasFile 来检查文件是否存在。

log.Debug("there are file" + FUQuestionFiles.HasFile.ToString());

HasFile 在选择多个文件时返回 false。

注意:如果只选择了一个文件,则返回true。

感谢您的帮助。

【问题讨论】:

  • 您是否尝试过像这样循环浏览已发布的文件? foreach (HttpPostedFile uploadedFile in FUQuestionFiles.PostedFiles) {
  • 是的。我尝试计算文件数,但计数仍然为 0
  • 工作正常,我在测试您的代码并按照@un-lucky 的建议循环发布的文件时看到所有文件。
  • 那它怎么不适合我:(它没​​有进入循环。

标签: c# asp.net .net file-upload updatepanel


【解决方案1】:

FileUpload 有两个不同的属性用于检查是否已上传/任何文件:

FileUpload.HasFile:

获取一个值,该值指示 FileUpload 控件是否包含 文件。

FileUpload.HasFiles:

获取一个值,该值指示是否已上传任何文件

检查是否上传了任何文件的最佳方法是同时检查HasFileHasFiles

if(fileUpload1.HasFile || fileUpload1.HasFiles)
    // do some code!

编辑 1:

您是否尝试在Page_Load 中添加以下行?

Page.Form.Attributes.Add("enctype", "multipart/form-data");

编辑 2:

你能解释一下这行代码有什么不同吗?

来自 W3C 中的 Forms in HTML documents 草案:

内容类型“application/x-www-form-urlencoded”效率低下 用于发送大量二进制数据或包含 非 ASCII 字符。 内容类型“multipart/form-data” 应该是 用于提交包含文件、非 ASCII 数据和 二进制数据。

如果表单包含file input,则表单的enctype 属性应设置为multipart/form-data

我认为您遇到了这个问题,因为您将 FileUpload 放在了 UpdatePanel 中。

【讨论】:

  • 两者都返回 false 。
  • 太棒了。谢谢。你能解释一下这行代码有什么不同吗?
  • @DKR 再次更新,希望对您和其他人有所帮助。
  • 感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 2016-10-16
  • 2013-02-22
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多