0

AsyncFileUpload コントロールに関連する奇妙な問題が発生しています。アップロード後、ClientUploadComplete イベント ハンドラから __doPostBack 関数を呼び出してページを更新しています。最初は問題なく動作しますが、次にファイルをアップロードしようとすると、アップロードする前に最初にページが更新され、次にアップロードが行われ、ページが再度更新されます。ページの更新がアップロード前とアップロード後に 2 回呼び出される理由がわかりません。このバグがあるこのコードの簡略化されたバージョンがあります。なぜそれが起こっているのか、何か手掛かりを教えてください。

マークアップ:

    <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);
    }
4

1 に答える 1

0

この質問には誰も答えられないようです。なぜこれが起こるのかはまだわかりませんが、アップロードが完了したときにセッションにフラグを追加し、ページのデータを更新する前にそのフラグを確認することで回避策を講じました。この方法では、アップロード前にデータの更新が行われません。ありがとう。

于 2011-01-28T16:21:17.970 に答える