C# 从另一个方法检索时,一个方法中的属性集返回null
嗨,我试图引用不同范围内的变量,即不同的方法。我是通过使用getter和setter来实现这一点的,但是另一个方法中的变量是null。我在这里看到了一个相关的问题,但这也不起作用。这是我的密码:C# 从另一个方法检索时,一个方法中的属性集返回null,c#,asp.net,C#,Asp.net,嗨,我试图引用不同范围内的变量,即不同的方法。我是通过使用getter和setter来实现这一点的,但是另一个方法中的变量是null。我在这里看到了一个相关的问题,但这也不起作用。这是我的密码: private string FileName { get; set; } protected void btnUpload_Click(object sender, EventArgs e) { if (FileUpload1.HasFile) {
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();
}
当我运行此命令时,文件名
显示为NULL
。虽然它是一个属性和类变量。
另一个甚至基本上是在
saveLocation
下载文件的逻辑。我可能缺少什么?这些方法中的每一个都会在对应用程序的单独请求时调用,每个按钮单击一次。每个请求都将创建页面类的新实例,这意味着该属性将被重新初始化(在本例中,默认值为string
,即null
)
为了保持该值不变,您需要将其放置在可以在请求之间持久存在但对用户来说是不同的地方。我们在会话
对象中正好有这样一个位置
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();
}
每次单击都由页面的不同实例处理。您需要在ViewState或Session中持久化该属性