嗨,我试图在不同的范围内引用变量,即在不同的方法中。我正在通过使用getter和setter来做到这一点,但在另一种方法中的变量为null。我在这里看到了一个相关的问题,但这也无法在C#中引用另一种方法的变量。这是我的代码:
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
。我可能会缺少什么?
在分别向您的应用程序发出请求时,将分别调用每种方法,每单击一次按钮便调用一个。每个请求都会创建您的页面类的新实例,这意味着将重新初始化该属性(在这种情况下,默认值为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();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句