首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AsyncFileUpload回发导致双上传

AsyncFileUpload回发导致双上传
EN

Stack Overflow用户
提问于 2011-02-16 15:01:45
回答 6查看 11.1K关注 0票数 5

我在网页上实现了AsyncFileUpload控件。此网页要求上载的文件出现在GridView中。

GridView包含以下列:“文件名”、“机密”复选框和删除上载文件的“删除”按钮。

由于AsyncFileUpload回发不会执行完整的页面回发,所以我需要在AsyncFileUpload控件的OnClientUploadComplete事件上“强制”回发,以便在上传文件后呈现网格视图。

OnClientUploadCompleteEvent中,我使用javascript调用__doPostBack。在这个回发中,我只绑定我的GridView并显示文件信息(我不重新保存文件)。

问题:AsyncFileUpload**’s上的首先“部分”回发,文件如预期一样成功上传。在我强制使用** __doPostBack**,的第二次回发中,文件被重新上传。**

您可以使用Google来验证这一点,它显示上传进度。其行为如下:

在选择文件后,进度从0%增加到100%,并且文件是uploaded.

  • After --这是,__doPostBack执行,您可以再次看到上传进度增量从0%增加到100%。

如何确保Gridview已正确填充,但文件不会上载两次?

我附上了一个包含问题的示例解决方案:https://www.yousendit.com/download/MzZFc2ZBNDRrYUN4dnc9PQ

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-02-16 21:29:34

也许很丑,但效果很好:

1)在asp:AsyncFileUpload AsyncFileUpload1控件下面添加css-隐藏asp:按钮。

代码语言:javascript
复制
<asp:Button runat="server" ID="btnClick" Text="Update grid" style="display:none"/>

2)在Page_Load方法上,删除if (Request.Params.Get("__EVENTTARGET") == "UploadPostback")并将其块放在一个简单的else中,到前一个if

3)在AsyncFileUpload1_UploadedComplete函数上,也删除if (Request.Params.Get("__EVENTTARGET") != "UploadPostback")行,但保留它中的所有内容。

4)回到aspx。在网格GridView1之外放置一个asp:UpdatePanel。

代码语言:javascript
复制
<asp:UpdatePanel runat="server" UpdateMode="Conditional">
     <Triggers>
         <asp:AsyncPostBackTrigger ControlID="btnClick" EventName="Click" />
     </Triggers>
     <ContentTemplate>

     <asp:GridView ID="GridView1" ...
     YOUR GRID CODE REMAINS THE SAME
     </asp:GridView>

    </ContentTemplate>
</asp:UpdatePanel>

5)最后一步是更改AjaxUploadComplete客户端javascript函数,使其触发回发。代之以下列案文:

代码语言:javascript
复制
function AjaxUploadComplete() {
    var btnClick = document.getElementById("btnClick");
    btnClick.click();
}

用户选择的任何文件只上传一次。

这里的所有更改都是在AjaxUpload.aspx & AjaxUpload.aspx.cs of your AjaxUpload.zip中进行的。

票数 2
EN

Stack Overflow用户

发布于 2014-02-10 07:34:56

有一个更简单的解决方案

@t0x1n3你给出的解决方案很简单,但不起作用

用更新面板名称UpdatePanelAFU包围AsyncFileUpload,然后在UpdatePanelAFU中执行以下操作:

代码语言:javascript
复制
 protected void AsyncFileUpload_UpdatePanelAFU(object sender,AjaxControlToolkit.AsyncFileUploadEventArgs e)
{

    if (Request.Params.Get("__EVENTTARGET") != "UpdatePanelAFU")
        return;
..... rest of the code 
}

享受吧!

票数 3
EN

Stack Overflow用户

发布于 2015-04-11 00:48:29

我相信维埃拉说得对。当文件上传时,UploadComplete被多次调用。下面这句话对我很管用。

代码语言:javascript
复制
void AsyncFileUpload1_UploadedComplete(object sender, AsyncFileUploadEventArgs e) {
    if (AsyncFileUpload1.IsUploading) return;
    // rest of your upload code
}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5018044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档