AsyncFileUpload回发导致双重上传

use*_*814 5 c# asp.net ajax gridview asyncfileupload

AsyncFileUpload在网页上实现了控件.此网页要求上传的文件显示在GridView.
GridView包含以下栏目:" 文件名 "," 机密 "复选框和" 删除 "按钮来删除上传的文件.

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

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

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

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

tia*_*014 2

也许丑陋,但有效:


1) 在 asp:AsyncFileUpload 控件下方添加一个 css 隐藏的 asp:Button AsyncFileUpload1

<asp:Button runat="server" ID="btnClick" Text="Update grid" style="display:none"/>
Run Code Online (Sandbox Code Playgroud)

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。

<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>
Run Code Online (Sandbox Code Playgroud)

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

function AjaxUploadComplete() {
    var btnClick = document.getElementById("btnClick");
    btnClick.click();
}
Run Code Online (Sandbox Code Playgroud)

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