小编典典

AsyncFileUpload回发导致双重上传

ajax

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


阅读 270

收藏
2020-07-26

共1个答案

小编典典

可能很难看,但可以:


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

<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。

<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函数以使其触发回发。将其替换为以下内容:

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

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

2020-07-26