在我的网页中,我无法在帖子后面和页面resfresh上获取会话变量。
问题是
如果页面不是IsPostback,那么我就能得到会话变量。 但如果页面回发则会出现错误。
当我将任何文件上传到服务器时出现此错误。我正在使用asynchfileupload上传图像并将其存储到会话变量中。然后在按钮上单击我将数据保存到目录。
但并非经常发生。
这是我的代码
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.
在pomuch谷歌搜索后,我读到当任何文件添加到任何子目录或编辑webconfig时将导致应用程序重新启动。
如果是这样我怎么能解决这个问题..
提前感谢。
答案 0 :(得分:1)
好吧,我刚刚使用ASP.NET MVC测试过,它对我来说很好。 我做的是疯狂两个动作,一个用于设置会话变量,另一个用于创建文件,所以我已经修改了默认的asp.net mvc应用程序家庭控制器:
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时,它会向会话添加内容,索引操作会将会话变量呈现给页面,我可以看到,它没有消失。然后我去创建文件,我的会话变量仍然存在,因此不会重新启动应用程序。我很确定,Web窗体应用程序的工作方式相同,可能是在保存文件并重新启动应用程序时丢失了一些异常(例如,由于缺少权限)。
答案 1 :(得分:0)
不要将上传的文件保存在Web应用程序的虚拟文件夹中。
这也降低了安全风险(现在,人们可能会上传一个asp页面,包括嵌入式代码,如果他们可以制作URL(这可能很简单)就可以访问它。)