如何正确使用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
控件添加到您的页面。 确保它具有所有必需的属性,包括ID
和runat
:
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 。