FileUploader.Has文件始终在.net 4.0中返回false

时间:2014-05-02 03:30:13

标签: c# asp.net file-upload

我一直在努力寻找答案,但我找不到任何有效的解决方案。

MultipleFileUploader.ascx:
     <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
        </asp:ScriptManagerProxy>  
    <asp:UpdatePanel ID="UpdatePanel1"  runat="server">
        <ContentTemplate>
    <asp:FileUpload ID="FileUpload1" runat="server" 
                    multiple="multiple" onchange="__doPostBack('<%= UpdatePanel1.ClientID %>', ''); type="file" />
      </ContentTemplate>
    </asp:UpdatePanel>

代码背后:

 protected void Page_Load(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile)
            onAttach();
    }

当用户使用Postback __doPostBack选择文件时,它会上传文件 它不应该是浏览器问题因为我在chrome firefox和IE上遇到了同样的问题。 代码一直工作正常,直到我们升级到.net 4.0,由于某种原因,FileUploader.HasFile总是返回false。

我试过了:

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

和:

<Triggers> 
   <asp:PostBackTrigger ControlID="btnUploadFile" /> 
</Triggers> 

我错过了一些简单的东西吗? 任何提供的帮助非常感谢。 非常感谢。

1 个答案:

答案 0 :(得分:2)

您是否将触发器置于<update panel>

<asp:UpdatePanel ID="UpdatePanel1"  runat="server">
  <Triggers> 
    <asp:PostBackTrigger ControlID="btnUploadFile" /> 
  </Triggers> 
 <rest of the code>
</asp:UpdatePanel>

取自这篇文章FileUpload.hasFile is always False

如果它仍然无效,请尝试将FileUpload控件放在UpdatePanel之外,看看它是否有效。推理:您不应该在FileUpload内放置UpdatePanel控件,因为UpdatePanel会向服务器发送一个AJAX请求。

确保运行Web应用程序的凭据可以访问该文件。换句话说it's not a file permission issue

您还可以使用FileUpload控件FileName属性

if (FileUpload1.FileName != string.Empty)