如何正确使用ASP.NET FileUpload控件

我正在尝试在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的大多数用法都在前面的代码中,但是我的理解是这不应该重要。

有谁知道为什么?

应该将ASP.NET控件放在aspx标记文件中。 这是与他们合作的首选方式。 因此,将FileUpload控件添加到您的页面。 确保它具有所有必需的属性,包括IDrunat

  

FileUpload1实例将自动在自动生成/更新的* .designer.cs文件中创建,该文件是页面的部分类。 您通常不必关心其中的内容,只需假设aspx页面上的任何控件都会自动实例化。

添加一个可以回发的按钮:

  

然后转到您的* .aspx.cs文件,其中包含您的代码并添加按钮单击处理程序。 在C#中它看起来像这样:

 protected void Button1_Click(object sender, EventArgs e) { if (this.FileUpload1.HasFile) { this.FileUpload1.SaveAs("c:\\" + this.FileUpload1.FileName); } } 

就是这样。 一切都应该按预期工作。

而不是在代码隐藏文件中实例化FileUpload ,只需在标记文件(.aspx文件)中声明它:

  

然后,您将能够访问该控件的所有属性,例如HasFile

从后面的代码添加FileUpload控件应该可以正常工作,其中HasFile属性应该可用(例如在Click事件中)。

如果属性似乎不可用(作为编译器错误或通过智能感知),您可能引用的变量与您认为的不同。

我注意到,当intellisence对一个对象不起作用时,你正在处理的上一行中的某个地方通常会出现错误。

另一个选项是您没有将FileUpload对象实例化为实例变量。 确保代码:

 FileUpload fileUpload = new FileUpload(); 

不在您的代码后面的函数内。

我在代码背后的解决方案是:

 System.Web.UI.WebControls.FileUpload fileUpload; 

我不知道为什么,但是当你在没有System.Web.UI.WebControls的情况下使用FileUpload时,它引用的是YourProject.FileUpload而不是System.Web.UI.WebControls.FileUpload