使用 ASP.NET 和 AJAX 的文件上传控件






4.57/5 (5投票s)
问题:如何将你的 Asp.Net 文件上传控件与 AJAX 结合使用。正如所有日常使用 ajax 编程的人所知,ajax 不会进行回发。
问题:如何将你的 Asp.Net 文件上传控件与 AJAX 结合使用。
正如所有日常使用 ajax 编程的人所知,ajax 不会回发整个页面,AJAX 允许网页异步更新。
我们中的许多人在 asp.net 中创建应用程序,并使用文件上传控件在服务器端上传文件。在这种情况下,如果我们使用 ajax 与文件上传控件,那么我们会发现文件上传控件中是空值(空的 HttpFileCollection),这是因为文件上传控件需要完整的回发才能上传文件。
文件上传控件在 UpdatePanel 控件内使用异步回发上传文件时不起作用。这是由于浏览器施加的安全限制,不允许 JavaScript 直接访问用户系统中的文件。但是,可以肯定的是,可以使用同步回发来上传文件。ASP.NET AJAX 允许同步和异步回发。
因此,“你不能使用部分回发来在服务器上上传文件,你必须使用完全回发”。
以下是代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div>
<table width="50%" cellpadding="2" cellspacing="0">
<tr>
<td>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="conditional">
<ContentTemplate>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="btnUpload_Click" />
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="btnUpload" />
</Triggers>
</asp:UpdatePanel>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
using System;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnUpload_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
FileUpload1.SaveAs(MapPath("~/TEST/" + FileUpload1.FileName));
}
}
}
现在,AJAX 异步文件上传控件可用于通过回发上传文件。
参考资料