将Value从函数传递到类级变量始终为null

本文关键字:变量 null Value 函数 | 更新日期: 2023-09-27 18:23:58

我在类级别定义了一个字符串变量,并在成功上传文件后在protected void UploadButton_Click(object sender, EventArgs e)中设置了这个变量。

这样做是为了将fileName变量的值从该函数传递给另一个 protected void btnSave_Click(object sender, EventArgs e) {},并将其保存在数据库中。但值始终为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;
            }
        }
    }
}

将Value从函数传递到类级变量始终为null

ASP.NET WebForms的工作方式并不像您所期望的那样…您必须了解页面的生命周期。

基本上,在每次请求时,都会从头开始重新创建页面对象。单击两个按钮将生成两个请求,因此您将获得两个页面实例,每个请求一个。你不能用这种方式在它们之间共享数据。

你有几种方法可以克服这一点:

  • 使用ViewState。这是一个基本上是序列化的对象,然后发送到客户端。客户端在每次回发时都会将其发回,并对其进行反序列化,以便您可以访问它。因此,不要将敏感数据放入其中。不过,也有一些设施可以让你加密这些数据
  • 使用Session。但这可能会很快变得混乱,当用户打开同一页面的多个实例时,您将不得不处理这种情况