65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.57/5 (5投票s)

2013 年 10 月 11 日

CPOL

1分钟阅读

viewsIcon

62686

问题:如何将你的 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 异步文件上传控件可用于通过回发上传文件。

参考资料

© . All rights reserved.