AJAX Control Toolkit: AsyncFileUpload Control

最近,CodePlex网站上发布了AJAX Control Toolkit的新版本。这个新版本包含了两个新的控件:SeaDragon Java Script Code (SJC)和AsyncFileUpload。SJC控件允许使用SeaDragon脚本来显示图像,并通过鼠标按钮键放大和缩小图像,而无需调整窗口大小。看了演示,这是一个非常酷的控件。而AsyncFileUpload控件则允许异步上传文件,这意味着可以在不进行回发的情况下上传文件。在上传过程中,控件会显示一个跳动的图像,并在上传完成时触发客户端和服务器端事件。

在本文中,将重点介绍AsyncFileUpload控件。需要注意的是,这个控件仅支持.NET 3.5或更高版本。

AsyncFileUpload 控件特性

众所周知,ASP.NET的文件上传控件不能在更新面板中工作。如果想将其放置在更新面板中,那么还需要一个回发触发器来上传文件。这个酷控件允许以异步方式上传文件。以下是关于这个控件的一些关键点:

  • 它在更新面板中工作
  • 它在没有任何回发的情况下上传文件
  • 它提供了客户端和服务器端事件
  • 它有不同颜色的选项来显示文件上传。例如,如果上传成功,它会显示绿色;否则,如果上传不成功,它会显示红色。
  • 可以在文件上传进行中显示加载图像。

但是,它也有一些缺点:

  1. 当使用这个控件时,一旦文件上传,没有办法清除文件上传控件的内容。
  2. 查看了这个控件的源代码,注意到控件将文件存储在会话中。它从不清除会话,这意味着每次导航回页面时,它都会将最后一个上传的文件加载到文本框中。
  3. 没有办法取消上传。
  4. 没有办法监控上传进度(完成了多少%)。
  5. 一旦选择文件,就开始上传。它将文件存储在会话中。

尽管有这些缺点,但这个控件看起来不错。现在,让来了解一些这个控件的属性和方法。

属性和方法

以下是一些可用的属性:

  • CompleteBackColor: 这个属性设置了控件在成功上传时的背景颜色。默认值是"Lime"。
  • ErrorBackColor: 这个属性设置了控件在上传不成功时的背景颜色。默认值是"Red"。
  • UploadingBackColor: 这个属性设置了文件上传进行中时控件的背景颜色。
  • UploaderStyle: 控件的样式有两种选择:传统和现代。默认是"Traditional"。
  • ThrobberID: 在文件上传时显示的控件的ID。它将用于显示加载/进行中的图像。
  • HasFile: 返回一个布尔值,指示控件是否有文件。

以下是一些可用的事件:

  • OnClientUploadError: 这是一个客户端事件。如果有不成功的上传,那么指定的JavaScript函数将被执行。
  • OnClientUploadStarted: 这也是一个客户端事件。当上传开始时,指定的JavaScript函数将被调用。这个事件将在上传之前被调用,一旦这个函数被执行,上传就会开始。
  • OnClientUploadComplete: 这也是一个客户端事件。如果有成功的上传,那么指定的JavaScript函数将被执行。
  • onuploadedcomplete: 这是一个服务器端事件,一旦上传完成,它将被执行。需要注意的一点是,一旦选择了文件,上传就会开始,但它仍然保留在会话中。它没有存储在任何物理位置。在这个事件中,可以指定路径并将文件保存到物理位置。一旦通过代码,事情就会变得清晰。

以下是一些可用的方法:

  • SaveAs(): 这个方法将文件保存在指定的路径上。

使用代码

让创建一个新的网站,并添加一个新下载的AjaxControl ToolKit DLL的引用。在default.aspx页面上,放置一个脚本管理器并注册Ajax控制工具包DLL。

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>

现在让放置AsyncFileUpload控件:

<cc1:AsyncFileUpload ID="AsyncFileUpload1" Width="400px" runat="server" OnClientUploadError="uploadError" OnClientUploadStarted="StartUpload" OnClientUploadComplete="UploadComplete" CompleteBackColor="Lime" UploaderStyle="Modern" ErrorBackColor="Red" ThrobberID="Throbber" onuploadedcomplete="AsyncFileUpload1_UploadedComplete" UploadingBackColor="#66CCFF" />

可以将其放置在更新面板内或更新面板外。如所见,已经设置了上面已经解释过的大多数属性和事件。让放置Throbber控件以显示进度图像。设置ThrobberID不是强制性的。如果它被设置,那么它将显示控件的内容。

<asp:Label ID="Throbber" runat="server" Style="display: none"> <img src="Images/indicator.gif" align="absmiddle" alt="loading" /> </asp:Label>

还放置了一个标签在页面上,显示上传的状态。这个控件的值通过客户端函数更新。

<asp:Label ID="lblStatus" runat="server" Style="font-family: Arial; font-size: small;"></asp:Label>

让放置JavaScript函数:

<script type="text/javascript" language="javascript"> function uploadError(sender, args) { document.getElementById('lblStatus').innerText = args.get_fileName() + "" + args.get_errorMessage() + ""; } function StartUpload(sender, args) { document.getElementById('lblStatus').innerText = 'Uploading Started.'; } function UploadComplete(sender, args) { var filename = args.get_fileName(); var contentType = args.get_contentType(); var text = "Size of " + filename + " is " + args.get_length() + " bytes"; if (contentType.length > 0) { text += "and content type is '" + contentType + "'."; } document.getElementById('lblStatus').innerText = text; } </script>

UploadComplete函数在屏幕上显示文件名、其大小和内容类型。

以下是UploadedComplete事件的服务器端代码:

protected void AsyncFileUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e) { System.Threading.Thread.Sleep(5000); if (AsyncFileUpload1.HasFile) { string strPath = MapPath("~/Uploads/") + Path.GetFileName(e.filename); AsyncFileUpload1.SaveAs(strPath); } }

就是这样。现在只需运行应用程序。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485