проблема обновления страницы после загрузки файла - PullRequest
0 голосов
/ 24 января 2011

У меня странная проблема, связанная с элементом управления AsyncFileUpload.после загрузки я обновляю страницу, вызывая функцию __doPostBack из обработчика событий ClientUploadComplete.в первый раз он работает нормально, но в следующий раз, когда я пытаюсь загрузить файл, он сначала обновляет страницу перед загрузкой, затем выполняет загрузку и снова обновляет страницу.не уверен, почему страница обновления вызывается дважды, один раз перед загрузкой и один раз после загрузки.У меня есть упрощенная версия этого кода, в котором есть эта ошибка.какие-либо подсказки, пожалуйста, почему это происходит?

Разметка:

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

1 Ответ

0 голосов
/ 28 января 2011

похоже, что никто не может ответить на этот вопрос.Я до сих пор не понял, почему это происходит, но я нашел обходной путь, добавив флаг в сеанс, когда загрузка завершена, и проверил этот флаг перед обновлением данных на странице.таким образом, обновление данных не произойдет до загрузки.спасибо.

...