我做了类似下面的代码:
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = Session["loginid"].ToString();
}
protected void delete_click(object sender, EventArgs e)
{
delete("mail1",Session["loginid"]);
}
private int delete(string mailid, string user)
{
System.IO.Directory.Delete(Server.MapPath(@"~\files\" + user + @"\" + mailid), true);
}
当我按下删除按钮时,一切正常,文件夹被删除。 但之后当页面再次回发时 NullRefrenceException 在以下位置引发 Label1.Text = Session["loginid"].ToString();
为什么会发生...?
当我不使用此 Directory.Delete() 方法时,一切正常, session 变量未设置为空。
当我跟踪我的应用程序时,我发现在 Directory.Delete() 方法之后 session 变量是完整的,并且我能够在 Directory.Delete() 之后的处理中使用这些 session 变量。
但是一旦页面回发,所有 session 变量都设置为空。 当我不使用此 delete() 方法时,不会出现此问题。
我要删除的文件夹在我的项目文件夹中。 我正在使用 Visual Studio 运行这个网站。
请帮忙。
最佳答案
这里只是另一个猜测,但可能是因为您修改了应用程序目录中的某些内容(自从您将 Server.MapPath
与 ~
一起使用以来的预感)。 IIS 可能认为应用程序已更改并回收应用程序,结果清除所有 session 。
这类似于您在有人使用该应用程序时修改您的 web.config 文件,它会删除所有 session 并回收该应用程序。您是否要删除可能包含 IIS 用于应用程序的信息的目录?
您说过只有当您包含该行代码时才会发生这种情况,并且当应用程序被 IIS 回收或超时时, session 实际上只会被持续清除(除非您自己手动执行)。显然没有超时,所以回收肯定是正在发生的事情。
关于asp.net - session 变量对象在回发时被删除 - ASP.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2303642/