如何正确使用 ASP.NET FileUpload 控件
Posted
技术标签:
【中文标题】如何正确使用 ASP.NET FileUpload 控件【英文标题】:How to correctly use the ASP.NET FileUpload control 【发布时间】:2011-01-15 12:58:07 【问题描述】:我正在尝试在 ASP.NET 中使用 FileUpload 控件
这是我当前的命名空间设置:
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
在我的课堂上,我只是在使用:
FileUpload fileUpload = new FileUpload();
但是,通常作为 FileUpload 一部分的属性似乎都不可用...例如 .HasFile。我正在尝试在后面的代码中制作 Button click 方法,我注意到 .HasFile 的大部分用法都在前面的代码中,但据我了解,这应该无关紧要。
有人知道为什么吗?
【问题讨论】:
【参考方案1】:ASP.NET 控件应该放在 aspx 标记文件中。这是与他们合作的首选方式。因此,将FileUpload
控件添加到您的页面。确保它具有所有必需的属性,包括 ID
和 runat
:
<asp:FileUpload ID="FileUpload1" runat="server" />
FileUpload1
的实例将在自动生成/更新的 *.designer.cs 文件中自动创建,该文件是您页面的部分类。您通常不必关心其中的内容,只需假设 aspx 页面上的任何控件都是自动实例化的。
添加一个回发按钮:
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
然后转到您有代码的 *.aspx.cs 文件并添加按钮单击处理程序。在 C# 中它看起来像这样:
protected void Button1_Click(object sender, EventArgs e)
if (this.FileUpload1.HasFile)
this.FileUpload1.SaveAs("c:\\" + this.FileUpload1.FileName);
就是这样。一切都应该按预期工作。
【讨论】:
【参考方案2】:不要在您的代码隐藏文件中实例化FileUpload
,只需在您的标记文件(.aspx 文件)中声明它:
<asp:FileUpload ID="fileUpload" runat="server" />
然后你就可以访问控件的所有属性了,比如HasFile
。
【讨论】:
【参考方案3】:从后面的代码添加 FileUpload 控件应该可以正常工作,其中 HasFile 属性应该可用(例如在您的 Click 事件中)。
如果属性似乎不可用(作为编译器错误或通过智能感知),您可能引用的变量与您认为的不同。
【讨论】:
【参考方案4】:我在代码后面的解决方案是:
System.Web.UI.WebControls.FileUpload fileUpload;
我不知道为什么,但是当您在没有 System.Web.UI.WebControls 的情况下使用 FileUpload 时,它引用的是 YourProject.FileUpload 而不是 System .Web.UI.WebControls.FileUpload.
【讨论】:
【参考方案5】:我注意到,当智能不适用于对象时,通常在您正在处理的类中的某处出现错误。
另一个选项是您没有将 FileUpload 对象实例化为实例变量。确保代码:
FileUpload fileUpload = new FileUpload();
不在你代码后面的函数内。
【讨论】:
【参考方案6】:老问题,但如果它可能对某人有帮助,这里是完整的示例
<form id="form1" runat="server">
<div>
<asp:FileUpload ID="FileUpload1" runat="server" /><br/>
<asp:Button ID="Button1" runat="server" Text="Upload File" OnClick="UploadFile" /><br/>
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</div>
</form>
在您的代码隐藏中,C# 代码抓取文件并将其保存在目录中
protected void UploadFile(object sender, EventArgs e)
//folder path to save uploaded file
string folderPath = Server.MapPath("~/Upload/");
//Check whether Directory (Folder) exists, although we have created, if it si not created this code will check
if (!Directory.Exists(folderPath))
//If folder does not exists. Create it.
Directory.CreateDirectory(folderPath);
//save file in the specified folder and path
FileUpload1.SaveAs(folderPath + Path.GetFileName(FileUpload1.FileName));
//once file is uploaded show message to user in label control
Label1.Text = Path.GetFileName(FileUpload1.FileName) + " has been uploaded.";
来源:File Upload in ASP.NET (Web-Forms Upload control example)
【讨论】:
以上是关于如何正确使用 ASP.NET FileUpload 控件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 FileUpload Interface (GUI) 将文件保存到 asp.net 中的选定位置?
在 ASP.net 中上传文件而不使用 FileUpload 服务器控件