我在网页上实现了AsyncFileUpload控件。此网页要求上载的文件出现在GridView中。
GridView包含以下列:“文件名”、“机密”复选框和删除上载文件的“删除”按钮。
由于AsyncFileUpload回发不会执行完整的页面回发,所以我需要在AsyncFileUpload控件的OnClientUploadComplete事件上“强制”回发,以便在上传文件后呈现网格视图。
在OnClientUploadCompleteEvent中,我使用javascript调用__doPostBack。在这个回发中,我只绑定我的GridView并显示文件信息(我不重新保存文件)。
问题:AsyncFileUpload**’s上的首先“部分”回发,文件如预期一样成功上传。在我强制使用** __doPostBack**,的第二次回发中,文件被重新上传。**
您可以使用Google来验证这一点,它显示上传进度。其行为如下:
在选择文件后,进度从0%增加到100%,并且文件是uploaded.
__doPostBack执行,您可以再次看到上传进度增量从0%增加到100%。如何确保Gridview已正确填充,但文件不会上载两次?
我附上了一个包含问题的示例解决方案:https://www.yousendit.com/download/MzZFc2ZBNDRrYUN4dnc9PQ
发布于 2011-02-16 21:29:34
也许很丑,但效果很好:
1)在asp:AsyncFileUpload AsyncFileUpload1控件下面添加css-隐藏asp:按钮。
<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.aspx & AjaxUpload.aspx.cs of your AjaxUpload.zip中进行的。
发布于 2014-02-10 07:34:56
有一个更简单的解决方案
@t0x1n3你给出的解决方案很简单,但不起作用
用更新面板名称UpdatePanelAFU包围AsyncFileUpload,然后在UpdatePanelAFU中执行以下操作:
protected void AsyncFileUpload_UpdatePanelAFU(object sender,AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
if (Request.Params.Get("__EVENTTARGET") != "UpdatePanelAFU")
return;
..... rest of the code
}享受吧!
发布于 2015-04-11 00:48:29
我相信维埃拉说得对。当文件上传时,UploadComplete被多次调用。下面这句话对我很管用。
void AsyncFileUpload1_UploadedComplete(object sender, AsyncFileUploadEventArgs e) {
if (AsyncFileUpload1.IsUploading) return;
// rest of your upload code
}
https://stackoverflow.com/questions/5018044
复制相似问题