我在类级别定义了一个字符串变量,并在成功上传文件后在protected void UploadButton_Click(object sender, EventArgs e)
中设置了此变量。
我这样做,以便我可以将fileName
变量的值从此函数传递到另一个
protected void btnSave_Click(object sender, EventArgs e) {}
,我将其保存在数据库中。但值始终为null。我做错了什么或它仍然为null,因为函数定义为Protected
类型
public partial class News: System.Web.UI.Page
{
string _fileName = null;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// some code here......
}
}
protected void UploadButton_Click(object sender, EventArgs e)
{
if (FileUploadControl.HasFile)
{
try
{
System.IO.FileInfo f = new System.IO.FileInfo(FileUploadControl.PostedFile.FileName);
if (f.Extension.ToLower() == ".pdf" || f.Extension.ToLower() == ".doc" || f.Extension.ToLower() == ".docx")
{
//3MB file size
if (FileUploadControl.PostedFile.ContentLength < 307200)
{
string filename = Path.GetFileName(FileUploadControl.FileName);
if (!System.IO.File.Exists("../pdf/news/" + FileUploadControl.FileName))
{
FileUploadControl.SaveAs(Server.MapPath("../pdf/research/") + filename);
StatusLabel.Text = "Upload status: File uploaded!";
_fileName = FileUploadControl.FileName;
}
else
{
_fileName = null;
StatusLabel.Text = "File with this name already exsists, Please rename file and Upload gain";
}
}
else
{
_fileName = null;
StatusLabel.Text = "Upload status: The file has to be less than 3MB!";
}
}
else
{
_fileName = null;
StatusLabel.Text = "Upload status: Only PDF or Word files are accepted!";
}
}
catch (Exception ex)
{
_fileName = null;
StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
}
}
}
}
答案 0 :(得分:1)
ASP.NET WebForms并不像你期望的那样工作......你必须理解page life cycle。
基本上,在每个请求中,您的页面对象都是从头开始重新创建的。两次按钮点击将生成两个请求,因此您将获得两个页面实例,每个请求一个。你不能用这种方式在他们之间共享数据。
你有几种方法可以解决这个问题:
ViewState
进行此操作。这是一个基本上序列化的对象,然后发送到客户端。客户端在每次回发时都会将其发回,然后对其进行反序列化,以便您可以访问它。所以不要把敏感数据放在里面。有些设施可以让你encrypt this data。Session
。但是这很快就会变得混乱,当用户打开同一页面的几个实例时,你将不得不处理这种情况。