【问题标题】:Property set in one method is returning null when retrieved from another method [duplicate]从另一种方法检索时,在一种方法中设置的属性返回 null [重复]
【发布时间】:2020-08-24 19:21:08
【问题描述】:

您好,我正在尝试在不同的范围内引用变量,即以不同的方法。我通过使用 getter 和 setter 来执行此操作,但不同方法中的变量为 null。我在这里看到了一个相关的问题,但这也不起作用C# referencing a variable from another method。这是我的代码:

private string FileName { get; set; }

protected void btnUpload_Click(object sender, EventArgs e)
{
    if (FileUpload1.HasFile)
    {                
        FileName = FileUpload1.FileName.ToString();        
        string extension = Path.GetExtension(FileName);
        FileName = FileName.Replace(extension, "");
        if (extension.ToLower()==".pdf")
        {
            FileUpload1.SaveAs(Server.MapPath("~/Uploads/" + FileName));
        }
    }
}

protected void btnSave_Click(object sender, EventArgs e)
{            
    string saveLocation = Server.MapPath("~/Downloads/" + FileName + ".doc");
    Response.Clear();            
    Response.ContentType = "application/octet-stream";
    Response.AppendHeader("content-disposition", "attachment;fileName" + Filename);
    Response.WriteFile(saveLocation);
    Response.End();
}

当我运行此程序时,FileName 将以 NULL 的形式出现。虽然它是一个属性和一个类变量。 另一个甚至基本上是在saveLocation 下载文件的逻辑。我可能会错过什么?

【问题讨论】:

  • 每次点击都由页面的不同实例处理。您需要在 ViewState 或 Session 中保留该属性

标签: c# asp.net


【解决方案1】:

这些方法中的每一个都会在对您的应用程序的单独请求时调用,每个按钮单击一个。每个请求都会创建一个新的页面类实例,这意味着该属性将被重新初始化(在这种情况下,默认值为string,即null)。

为了保留该值,您需要将其放置在可以在请求之间持续存在但对用户不同的地方。我们在Session 对象中有这样一个位置。

protected void btnUpload_Click(object sender, EventArgs e)
{
    if (FileUpload1.HasFile)
    {                
        string fileName = FileUpload1.FileName.ToString();        
        string extension = Path.GetExtension(fileName);
        fileName = fileName.Replace(extension, "");
        if (extension.ToLower()==".pdf")
        {
            FileUpload1.SaveAs(Server.MapPath("~/Uploads/" + fileName));
        }
        Session["UploadedFileName"] = fileName;
    }
}

protected void btnSave_Click(object sender, EventArgs e)
{
    string fileName = Session["UploadedFileName"];
    if (string.IsNullOrWhiteSpace(fileName))
    {
        // you may want to throw and exception or display an error message here...
        // At minimum, don't try to send the file
        return;
    }

    string saveLocation = Server.MapPath("~/Downloads/" + fileName + ".doc");
    Response.Clear();            
    Response.ContentType = "application/octet-stream";
    Response.AppendHeader("content-disposition", "attachment;fileName" + Filename);
    Response.WriteFile(saveLocation);
    Response.End();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多