[英]Asynchronous file upload inside a update panel and a dropdown to trigger postback not working
[英]UpdateProgress and trigger section not working in Update panel while implement file upload control asynchronously
我正在嘗試使用更新面板中的asp.net文件上載控件上載圖像文件。 我想處理UpdateProgress以顯示進度條圖像,該進度條圖像指示進度以及文件上傳。
情況1:當我刪除觸發器部分並使用UpdateProgress部分時,進度過程運行正常,但文件上傳控件無法上傳我的文件。 [ 頁面未重新加載 ]
情況2:當我使用觸發器部分並刪除UpdateProgress部分時,文件被上傳,但頁面被重新加載。
預期:我真正想要的是一個很好的文件上傳過程,該過程包括UpdateProgress以顯示進度圖像,並且嚴格沒有頁面加載。
我去過的是:
.aspx部分
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdateProgress ID="loading" runat="server">
<ProgressTemplate>
<asp:Image ID="Image1" CssClass="loadingGeneral" ImageUrl="../Images/loading(1).gif" AlternateText="Processing" runat="server" />
</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:FileUpload ID="fileUploadForAlbum" multiple="true" CssClass="buttonclass" runat="server" ToolTip="Click to browse image." />
<asp:Button ID="btn_uploadAlbum" runat="server" class="buttonclass" OnClick="btnUploadAlbum_Click" Text="Upload Slider" />
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="btn_uploadAlbum" />
</Triggers>
</asp:UpdatePanel>
.aspx.cs部分
文件上傳代碼部分很好,我已經使用下面的方法來實現進度條。
protected void btnUploadAlbum_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(2000);
do something.........
}
提前致謝。 任何幫助表示贊賞。
關於FileUpload
控件,有一些有趣的事實要知道。
1.)文件上傳控件不適用於異步回發。 它總是需要回發才能正常工作。 這就是您看到整頁回發的原因。
2.)AsyncPostbackTrigger在這里無法防止回發。
MSDN
明確指出:
The FileUpload control is designed to be used only in postback scenarios
and not in asynchronous postback scenarios during partial-page rendering.
When you use a FileUpload control inside an UpdatePanel control, the file must
be uploaded by using a control that is a PostBackTrigger object for the panel
這使得我們可以推斷出第三點:
3.)我們需要使用PostBackTrigger
來使FileUpload
控件與UpdatePanel
,然后將進行整頁的回發。
您的問題 :
What I really want is a fine file upload process that includes UpdateProgress
to show progress image and strictly with no page loads
對此的好答案之一是使用AsyncFileUpload
控件。 此控件的功能:
ThrobberID
屬性在文件上傳過程中顯示加載圖像。 CompleteBackColor
屬性,如果上傳失敗,則使用ErrorBackColor
屬性顯示紅色。 在.aspx
頁面上,放置一個腳本管理器並注冊Ajax控件工具包DLL。
<%@ Register Assembly="AjaxControlToolkit"
Namespace="AjaxControlToolkit" TagPrefix="ajaxasyncFU" %>
現在放置AsyncFileUpload
控件:
<ajaxasyncFU:AsyncFileUpload ID="AsyncFileUpload1" runat="server"
OnClientUploadError="uploadError" OnClientUploadStarted="StartUpload"
OnClientUploadComplete="UploadComplete"
CompleteBackColor="Lime" UploaderStyle="Modern"
ErrorBackColor="Red" ThrobberID="Throbber"
onuploadedcomplete="AsyncFileUpload1_UploadedComplete"
UploadingBackColor="#66CCFF" />
您可以使用3個客戶端事件: OnClientUploadError
, OnClientUploadStarted
和OnClientUploadComplete
還有一個服務器端事件: onuploadedcomplete
,以異步方式調用,因此避免了整個頁面的回發。 通常在此服務器事件中,我們保存文件:
protected void AsyncFileUpload1_UploadedComplete
(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
if (AsyncFileUpload1.HasFile)
{
string strPath = MapPath("~/MyImages/") + Path.GetFileName(e.filename);
AsyncFileUpload1.SaveAs(strPath);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.