【问题标题】:FileUpload content is empty文件上传内容为空
【发布时间】:2015-05-22 23:22:52
【问题描述】:

我知道有很多关于同一主题的问题,但我还没有看到一个可以解决我的问题的问题。所以我有一个UpdatePanel 在它的ContentTemplate 我有一个ListView 和一个Panel,里面有一个FileUpload,一个取消按钮和一个上传按钮。当上传按钮被按下时,它会在服务器端调用一个方法来处理文件上传业务。我的问题是 HttpFileCollection 对象是空的,即使我确实选择了一些东西。

这是我正在做的一个例子。按照公司的政策,我不能发布原始程序,但这应该足够了,因为它是上传时唯一运行的东西。

客户端:

<asp:UpdatePanel ID="upMain" runat="server">
<ContentTemplate>
    <asp:ListView>
        <asp:Panel ID="pnlFileUpload" runat="server" CssClass ="custom-menu">
            <asp:FileUpload ID="fuUpload" runat="server" AllowMultiple="true" />
            <asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="OnUploadFile" />
            <asp:Button ID="btnCancel" runat="server" Text="Cancel" />                                    
        </asp:Panel>

        <asp:ModalPopupExtender ID="mpeUpload" runat="server" TargetControlID ="imgBtnUploadFile" PopupControlID="pnlFileUpload" CancelControlID="btnCancel"
    BackgroundCssClass="modalBackgroud">
            <Animations>
            <OnShown>
                <%--The FadeIn and Display animation.--%>
                <FadeIn Duration="0.25" MinimumOpacity="0" MaximumOpacity="1" />
            </OnShown>
            </Animations>
        </asp:ModalPopupExtender>
    </asp:ListView>
</ContentTemplate>
</asp:UpdatePanel>

服务器端:

protected void OnUploadFile(object sender, EventArgs e)
{
    HttpFileCollection files = Request.Files; 
}

我在files 上有一个断点,当它命中时,keys 为 0,content 为空,InputStream 也为空。我已经尝试了一些不同的方法,从将页面的enctype ="multipart/form-data" 设置为许多其他我不记得的东西,现在。

仍然掌握 asp 的窍门,因此任何带有解释的建议,将不胜感激。

【问题讨论】:

  • 尝试将它放在UpdatePanel 之外,有时UpdatePanel 会在您不知道通过Ajax 的情况下执行Post。然后,那里的文件消失了,因为虽然它显示了文件,但是当您执行Post 时,控件不知道该文件。
  • @Greg,这是有道理的。我会尝试一下。

标签: c# asp.net file-upload


【解决方案1】:

来自MSDN

以下 ASP.NET 控件与部分页面不兼容 更新,因此不适合在 UpdatePanel 内工作 控制:

...

FileUpload 和 HtmlInputFile 控件用于上传时 文件作为异步回发的一部分。
...

UpdatePanel 中使用 FileUpload 或 HtmlInputFile 控件 控件,将提交文件的postback控件设置为 PostBackTrigger 控件用于面板。 文件上传和 HtmlInputFile 控件只能在回发场景中使用

【讨论】:

  • 有趣的是,它适用于我在 chrome 上的早期版本的网络应用程序,但不适用于 ie9,而且我的内容与我在这里展示的非常相似。
【解决方案2】:

您的错误很可能是由于您的UpdatePanel。控制的前提是美妙的,可悲的是,执行是非常糟糕的。它通常会导致您的页面状态出现问题。它在 UpdatePanel 的实际工作方式中做到了这一点。

控件将复制您的页面,将其存储在内存中,然后重新加载整个页面。这会阻碍您的性能,但副作用是当页面重新加载时,它将经历 Asp.Net 页面生命周期。如果您不小心,这可能会产生一系列问题。

我会做的是将您的FileUploadUpload Button 移出面板,验证它是否正确上传。确认后,您就知道 UpdatePanel 是罪魁祸首。然后您可以在约束范围内工作,或者我会手动执行 Ajax 请求。

希望这个解释对你来说更详细。

【讨论】:

  • 感谢您的洞察力,我会尝试组织事情。我可能会将此标记为答案。
  • 我还有一个问题,抱歉。一旦文件被选中并转到OnUploadFileHttpFileCollection 说它有东西但InputStream 是空的。
  • 为什么要让它复杂化,一旦你点击一个按钮就检查它是否有文件。除非你真的需要在那次活动期间进行这些检查。
  • 我成功了,我切换回使用FileUpload 对象而不是HttpFileCollection 。谢谢
  • 我相信该对象实际上使用了一个八进制数组,它易于使用。
猜你喜欢
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多