异步实现文件上传控制时,更新进度和触发器部分在更新面板中不起作用
本文关键字:更新 触发器部 不起作用 文件 实现 控制 异步 | 更新日期: 2023-09-27 18:32:57
我正在尝试使用更新面板中的文件上传控件上传图像文件 asp.net。我想处理 UpdateProgress 以显示指示进度以及文件上传的进度条图像。
情况 1:当我删除触发器部分并使用 UpdateProgress 部分时,进度过程工作正常,但文件上传控件无法上传我的文件。[页面不重新加载]
情况2:当我使用触发器部分并删除更新进度部分时,文件被上传,但页面被重新加载。
预期:我真正想要的是一个精细的文件上传过程,其中包括 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);
}
}
检查以下 2 个链接: Link1
, Link2
进一步阅读。