根据Microsoft的说法,FileUpload 控件与 AJAX UpdatePanel 不兼容。
我知道可以将 PostBackTrigger 添加到表单的提交按钮中,如下所示:
<Triggers>
<asp:PostBackTrigger ControlID="Button1" />
</Triggers>
问题是这会强制表单执行完整的回发,这首先会消除使用 UpdatePanel 的全部意义。是否有解决此问题的方法不会导致整个页面刷新?
根据Microsoft的说法,FileUpload 控件与 AJAX UpdatePanel 不兼容。
我知道可以将 PostBackTrigger 添加到表单的提交按钮中,如下所示:
<Triggers>
<asp:PostBackTrigger ControlID="Button1" />
</Triggers>
问题是这会强制表单执行完整的回发,这首先会消除使用 UpdatePanel 的全部意义。是否有解决此问题的方法不会导致整个页面刷新?
我知道可以做到这一点的第三方组件。它被称为“ swfupload ”,可以免费使用和开源,并使用 javascript 和 flash 来创造奇迹。
这是他们提供的功能列表:(来自他们的网站)
- 在对话框中通过 ctrl/shift-selecting 一次上传多个文件
- 所有事件的 Javascript 回调
- 在上传开始前获取文件信息
- 使用 XHTML 和 css 样式上传元素
- 使用 HTML 上传文件时显示信息
- 无需重新加载页面
- 适用于所有支持 Flash 的平台/浏览器。
- 如果 Flash 或 javascript 不可用,则优雅地降级为正常的 HTML 上传表单
- 在上传开始之前控制文件大小
- 仅在对话框中显示选择的文件类型
- 排队上传,在开始上传之前删除/添加文件
他们还有一个演示区,您可以在其中玩弄他们的控制。这样你就可以确保它正是你想要的。
我们在我们的一个项目中使用了它,到目前为止它从未让我们失望过,所以我认为这是一个安全的选择。
哦,这里是下载页面:http ://code.google.com/p/swfupload/
您不能AJAX
仅通过重新加载整个HTML
文档来上传文件。iframe
如果您更喜欢纯 HTML(这更常见,例如 WordPress 使用),您应该使用s 或 Sven 建议的其他类似 swfupload 的东西。
将此添加到您的按钮控件:
OnClientClick="javascript:document.forms[0].encoding = 'multipart/form-data';"
-或者-
使您的页面表单标签看起来像:
<form id="form1" runat="server" enctype="multipart/form-data">
前几天我遇到同样的问题时发现了这个:http: //vinayakshrestha.wordpress.com/2007/03/13/uploading-files-using-aspnet-ajax-extensions/。
对于我的实现,我将 iframe 放在模式弹出窗口中,并添加了一个带有 style="display:none" 的按钮来处理弹出窗口的关闭。在监视 iframe 变化的 javascript 函数中,我添加了 document.getElementById("<%=btnCloseUpload.ClientID%>").click(); 对于隐藏按钮。
试试 AJAX AsyncFileUpload。如果用于它打算使用的事情(处理 UploadedComplete 事件),它会很好地工作。
http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AsyncFileUpload/AsyncFileUpload.aspx
可以使用 IFrame 具有提到 FileUpload 页面的“目标”属性,或者在链接中使用 Jquery 示例 如何使用 iframe 进行异步(AJAX)文件上传?
触发上传事件的按钮需要将UseSubmitBehavior
属性设置为 false:
clsUploadButton.UseSubmitBehavior = False;