当前位置: 首页 > 面试题库 >

AsyncFileUpload回发导致双重上传

武骁
2023-03-14
问题内容

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


问题答案:

可能很难看,但可以:

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中进行。



 类似资料:
  • 考虑规范的示例: 单击按钮使每个状态打印两次。为什么呢?

  • 我正在尝试实现一个仅将输入限制为大写字符[A-Z0-9]和数字。 我从某篇文章开始使用InputFilter方法。但我在三星Galaxy Tab 2上遇到了一个问题,但在模拟器或Nexus 4上没有。 问题是这样的: 当我键入“A”时,文本显示为“A”很好 现在,当我键入“B”时,文本应该是“AB”,但它给了我“AAB”,这看起来很奇怪 简而言之,它重复字符 以下是我正在使用此代码的代码: 文件代

  • 问题内容: 我在UpdatePanel的ListView中有一个LinkBut​​ton。我希望按钮(好吧,其中的任何一个)引起部分回发,但它们却引起整个页面的回发。 我在stackoverflow上发现了另一条建议添加此内容的帖子: 没什么不同… 也有一些其他类似的帖子,但是我找不到解决方案!有任何想法吗? 问题答案: ASP.NET 4中的ClientIDMode设置使您可以指定ASP.NET

  • 我正在尝试使用一个需要双向ssl身份验证的web服务,它属于一家公司X。我在axis2中创建了一个客户端,并将其配置为支持https(将服务器证书导入信任库,设置密钥库路径..等等)。当我调用它时,我不允许读取超时异常。我应该提到的是,握手是通过的,关于证书没有例外(我已经处理过)。 我做了以下工作(单独和组合): -使用了axis2的壁垒, -调低了我计算机上的防火墙, -绕过了我公司的防火墙(

  • 问题内容: 我有一个中型的Elasticsearch索引(1.46T或〜1e8文档)。它在4台服务器上运行,每台服务器在弹性和OS(用于缓存)之间平均分配64GB Ram。 我想尝试新的“重要条款”聚合,因此我触发了以下查询… 哪个应将指定的文档的主体与索引的其余部分进行比较,并找到对文档有意义的,索引中不常见的术语。 不幸的是,这总是导致 ElasticsearchException [org.

  • 问题内容: 快速的问题,我已经尝试自己弄清楚这一点,但是在试图弄清页面为什么或如何重新加载以及正在/不应该执行其应做的工作时,使用会话变量可能会造成混淆。 在任何(非脚本)情况下,页面重新加载(使用JavaScript,f5,ctrl + f5,浏览器重新加载按钮等)是否会导致表单重新发布? (这与在C#代码中使用IfPost分支有关,例如下面的示例代码): 我只是需要知道在这里期望什么,以便可以