在我的网页中,我无法在回发和页面刷新时获取 session 变量。
问题是
如果页面不是 IsPostback,那么我可以获取 session 变量。 但如果页面回发,则会出现错误。
当我将任何文件上传到服务器时会出现此错误。我正在使用 asynchfileupload 上传图像并将其存储到 session 变量。然后单击按钮,我将数据保存到目录。
但这种情况并不经常发生。
这是我的代码
protected void AsynImageLoader_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
if (AsynImageLoader.PostedFile != null)
{
string extension = System.IO.Path.GetExtension(AsynImageLoader.PostedFile.FileName);
if (extension == ".jpg" || extension == ".gif" || extension == ".jpeg" || extension == ".png")
{
HttpPostedFile file = AsynImageLoader.PostedFile;
Session["TempImage"] = ReadFile(file);
}
}
}
点击按钮
var storedImage = Session["TempImage"] as byte[];
String Strthumbpath = Server.MapPath("content\\thumbnail\\");
if (storedImage != null)
{
System.Drawing.Image image = GetImage(storedImage);
if (image != null)
{
image.Save(Strthumbpath + strFileName);
}
}
///inserting values to datbase.
经过大量谷歌搜索后,我了解到当任何文件添加到任何子目录或编辑 webconfig 时,都会导致应用程序重新启动。
如果是这样我该如何解决..
提前致谢。
最佳答案
好吧,我刚刚使用 ASP.NET MVC 进行了测试,它对我来说工作正常。 我所做的是创建两个 Action ,一个用于设置 session 变量,另一个用于创建文件,所以我将默认的 asp.net mvc 应用程序主 Controller 修改为:
public ActionResult Index()
{
ViewBag.Message = Session["Sample"];
return View();
}
public ActionResult About()
{
return View();
}
public ActionResult AddSessionVariable()
{
Session["Sample"] = "Sample session variable";
return RedirectToAction("Index");
}
public ActionResult CreateFile()
{
var bmp = new Bitmap(100, 100);
bmp.Save(Server.MapPath(string.Format(@"\Images\{0}", DateTime.Now.Ticks)));
return RedirectToAction("Index");
}
因此,当我转到 AddSessionVriable 时,它会向 session 添加一些内容,并且索引操作会将该 session 变量呈现到页面,我可以看到,它并没有消失。然后我去创建文件,我的 session 变量仍然存在,所以不会重新启动应用程序。我很确定,Web 窗体应用程序的工作方式相同,可能是您在保存文件时丢失了一些异常(例如,由于缺少权限)并重新启动了您的应用程序。
关于c# - session 值在回发和页面刷新时变为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5866193/