UpdatePanel中的FileUpload控件而不刷新整个页面?

时间:2020-03-05 18:45:22  来源:igfitidea点击:

根据Microsoft的说明,FileUpload控件与AJAX UpdatePanel不兼容。

我知道可以将PostBackTrigger添加到表单的提交按钮中,如下所示:

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

问题在于,这迫使表单执行完整的回发,从而使首先使用UpdatePanel的整个工作变得无效。是否有解决此问题的方法,但不会导致整个页面刷新?

解决方案

回答

我知道可以做到这一点的第三方组件。它称为" swfupload",可免费使用和开源,并使用javascript和flash来完成。

以下是他们提供的功能列表:
(来自他们的网站)

Upload multiple files at once by ctrl/shift-selecting in dialog
  Javascript callbacks on all events
  Get file information before upload starts
  Style upload elements with XHTML and css
  Display information while files are uploading using HTML
  No page reloads necessary
  Works on all platforms/browsers that has Flash support.
  Degrades gracefully to normal HTML upload form if Flash or javascript is
  unavailable
  Control filesize before upload starts
  Only display chosen filetypes in dialog
  Queue uploads, remove/add files before starting upload

他们还有一个演示区域,我们可以在其中进行控制。这样,我们可以确保它正是我们想要的。

我们在一个项目中使用了它,到目前为止,它从未使我们失败,所以我认为这是一个安全的选择。

哦,这是下载页面:http://code.google.com/p/swfupload/

回答

我们不能仅通过重新加载整个HTML文档来通过AJAX上传文件。如果我们更喜欢纯HTML(更常见,例如WordPress使用的HTML),则应该使用iframe,也可以使用Sven建议的诸如swfupload之类的东西。

回答

前几天,当我遇到相同的问题时,我发现了这一点:http://vinayakshrestha.wordpress.com/2007/03/13/uploading-files-using-aspnet-ajax-extensions/。

对于我的实现,我将iframe放在模式弹出窗口中,并添加了一个样式为" display:none"的按钮来处理弹出窗口的关闭。在监视iframe中更改的javascript函数中,我添加了document.getElementById(" <%= btnCloseUpload.C​​lientID%>")。click();隐藏按钮。

回答

将此添加到按钮控件:

OnClientClick="javascript:document.forms[0].encoding = 'multipart/form-data';"

-或者-

使页面的Form标签看起来像:

<form id="form1" runat="server" enctype="multipart/form-data">

回答

试试AJAX AsyncFileUpload。如果在打算使用的情况下使用它,则效果很好(处理UploadedComplete事件)。

http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AsyncFileUpload/AsyncFileUpload.aspx