AsyncFileUpload回发会导致双重上传

我在网页上实现了AsyncFileUpload控件。 此网页要求上传的文件显示在GridView
GridView包含以下列:“ 文件名 ”,“ 机密 ”复选框和“ 删除 ”按钮以删除上载的文件。

由于AsyncFileUpload回发不执行整页回发,因此我需要在AsyncFileUpload控件的OnClientUploadComplete事件上“强制”回发,以便在上载文件后呈现gridview。
OnClientUploadCompleteEvent ,我使用javascript来调用__doPostBack 。 在这个回发中,我只绑定我的GridView并显示文件信息(我不重新保存文件)。

问题: AsyncFileUpload的第一个“部分”回发上,文件已按预期成功上传。 在我用__doPostBack强制的第二个回发中,文件被重新上传。
您可以使用显示上传进度的Google Chromevalidation这一点。 行为如下:
– 选择文件后,进度从0%增加到100%并上传文件。
– 此后,执行__doPostBack ,您可以再次看到上传进度从0%增加到100%。

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

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

也许难看,但有效:


1)添加一个css-hidden asp:按钮下面的asp:AsyncFileUpload AsyncFileUpload1控件。

  

2)在Page_Load方法上,删除if (Request.Params.Get("__EVENTTARGET") == "UploadPostback")并将其块放在前面的if

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

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

         

5)最后一步是更改AjaxUploadComplete客户端javascript函数,使其触发回发。 将其替换为以下内容:

 function AjaxUploadComplete() { var btnClick = document.getElementById("btnClick"); btnClick.click(); } 

用户选择的任何文件仅上载一次。
此处的所有更改都应在AjaxUpload.zip的AjaxUpload.aspx和AjaxUpload.aspx.cs中进行。

有一个更简单的解决方案

@@ t0x1n3我自己给出的解决方案非常简单但不起作用

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

  protected void AsyncFileUpload_UpdatePanelAFU(object sender,AjaxControlToolkit.AsyncFileUploadEventArgs e) { if (Request.Params.Get("__EVENTTARGET") != "UpdatePanelAFU") return; ..... rest of the code } 

请享用!

我相信@Veera是对的。 在文件上传时,多次调用UploadComplete。 以下对我有用。

 void AsyncFileUpload1_UploadedComplete(object sender, AsyncFileUploadEventArgs e) { if (AsyncFileUpload1.IsUploading) return; // rest of your upload code } 

我无法访问包含该问题的示例解决方案,但我在项目中遇到了使用AsyncFileUpload组件的双重回发。 我发现了一个非常简单的解决方法:

只需添加:

 private bool justUploaded = false; 

然后:

 void AsyncFileUpload1_UploadedComplete(object sender, AsyncFileUploadEventArgs e) { if (justUploaded) return; justUploaded = true; // rest of your upload code } 

我发现这是一个更优雅的解决方案,在这里找到: http : //forums.asp.net/t/1951566.aspx?AsyncFileUpload +uploads +twice )但下面是我改变的完全工作代码:

   AsyncFileUpload Example    

AsyncFileUpload有一个名为IsUploading的属性。 当此属性设置为false时,将发生postback 。 你可以这样检查这个属性:

 if(AsyncFileUpload1.IsUploading) { ..... upload codes }