我遇到了一个与AsyncFileUpload控件相关的奇怪问题。上传之后,我通过ClientUploadComplete事件处理程序中的calling__doPostBack函数更新页面。它第一次工作正常,但下次我尝试上传文件时,它会在上传之前先刷新页面,然后进行上传并再次刷新页面。不确定为什么刷新页面会被调用两次,一次是在上传之前,一次是在上传之后。我有一个这个代码的简化版本,它有这个bug。有什么线索能告诉我为什么会这样吗?
标记:
<form id="form1" runat="server">
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
</asp:ToolkitScriptManager>
<div>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:AsyncFileUpload ID="AsyncFileUpload1" runat="server" OnClientUploadComplete="AsyncFileUpload1_ClientUploadComplete"
OnUploadedComplete="AsyncFileUpload1_UploadedComplete" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" Text="Refresh Data" OnClick="Button1_Click" />
<asp:Label ID="Label1" runat="server" EnableViewState="false"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</form>Javascript:
<script type="text/javascript">
function AsyncFileUpload1_ClientUploadComplete() {
var btnRefreshData = $get("<%=Button1.ClientID%>").name;
__doPostBack(btnRefreshData, "");
}
</script>代码隐藏:
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "Upload complete";
}
protected void AsyncFileUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
System.Threading.Thread.Sleep(3000);
}发布于 2011-01-29 00:21:18
看起来没有人能回答这个问题。我仍然没有弄清楚为什么会发生这种情况,但我在上传完成时在会话中添加了一个标志,并在刷新页面上的数据之前检查该标志,从而解决了这个问题。这样,数据刷新不会在上传之前发生。谢谢。
https://stackoverflow.com/questions/4784968
复制相似问题