在AJAX更新面板中上传文件而没有完整的回发

时间:2009-04-28 10:13:52

标签: asp.net ajax file-upload updatepanel asynchronous-postback

我有一个更新面板,在更新面板中我有文件上载控件和按钮控件,点击按钮,我需要在updatepanel中的fileupload控件中上传的文件。

确切的情况,我在页面上有8个选项卡,每个选项卡包含太多信息,其中一个选项卡是Attachment,当用户单击Add New Attachment Modal Popup时,Modal包含Updatepanel中的详细信息视图,在详细信息视图中我有fileupload控制,当用户点击保存按钮时, detailsview插入事件被触发,在插入事件中我需要我上传的文件。
请注意,我的页面很重,我不想要完整的回复。


有没有人能解决这个问题?

感谢你的帮助......

6 个答案:

答案 0 :(得分:36)

要解决此问题,请参阅以下步骤。

  1. 将ajax-upload添加到您的详细信息视图。
    • 基于iframe的上传器,如资源#1。
    • 基于Silverlight的&基于Flash的上传器。我喜欢这种技术,因为它不需要任何服务器端脚本来显示当前上传状态。但是在HTML5中,您可以在不使用任何Web浏览器插件的情况下创建它。
    • 使用隐藏iframe进行上传的资源#2。等商业上传器。
  2. 将文件上传到临时位置。

    • 系统响应临时位置。接下来,客户端以详细形式将临时位置保存在隐藏输入中。
    • 使用session_id保留临时位置。您可以将其存储在数据库或Session变量中,具体取决于您的框架。
  3. 当您点击保存按钮时,系统会将文件移动到其实际位置

  4. 请注意。系统将自动从临时位置删除过期文件。

    资源

    1. ASP.NET File Upload with Real-Time Progress Bar
    2. ASP.NET File Upload like GMail (Commercial)
    3. <强>更新

      差不多一年后,我刚刚找到了一个很好的第三方控制这个问题。这是jQuery的开源插件。它命名为Plupload,允许您使用HTML5,Silverlight,Flash或普通表单上传文件,它提供了一些独特的功能,如上传进度,图像大小调整和分块上传。

      You can try & test Plupload by click here.

答案 1 :(得分:4)

如果没有在客户端上安装合作二进制文件,则无法完成。 AJAX框架没有安全机制来读取文件的内容,因此能够将其发送到服务器。浏览器仅支持将其作为文件输入框中的多部分表单发布。

答案 2 :(得分:1)

问题在于HTML文件上传控件的工作方式,与ASP.net无关,为了文件上传控件的工作,你需要一个完整的表格数据。您只能通过执行实际上传的隐藏iframe中的所有操作来模拟您没有进行完整的回发

答案 3 :(得分:0)

您看到的提供此功能的网站通常使用flash或iframe,以便在iframe中进行回发并提供ajax请求的错觉。

HTH

单稳

答案 4 :(得分:0)

我已经尝试过swfupload(http://swfupload.org/),但请记住,如果您在非IE浏览器中使用表单身份验证,则必须跳过箍。这显然是一个flash bug,并没有在flash 10中修复。我决定不在我们的框架中使用它因为这个bug,但它本来是一个很棒的产品。

答案 5 :(得分:0)

我推荐YUI的上传器小部件。见http://developer.yahoo.com/yui/uploader/

我认为你可以用它来实现你的目标。您的javascript需要在完成上传后从服务器将文件提取回客户端。但页面不会刷新 - 上传是通过flash和隐藏的iframe。向用户显示文件内容的下载将通过ajax。

如果用户没有“批准”上传,则只需再次向服务器发出ajax调用即可删除该文件。