我已经喜欢的东西下列代码:

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是提出在 标签1.Text=Session["登录id"].ToString();

为什么是它发生的事情...??

当我没有使用这一目录。删除()方法的一切工作正常和会变量,不集到空。

当我追踪到我用我发现后目录。删除()法会议变量完整和我能够使用这些会议中的变量之后处理目录。删除().

但尽快页回发所有会议设置变量为空。和这个问题不会出现时我可不是使用这种删除()方法。

该文件夹中,我删除是在我的项目的文件夹。我运行该网站使用Visual Studio.

请帮助。

有帮助吗?

解决方案

只是另一种猜测在这里,但也许是因为你修改你的应用程序目录下的东西(因为你使用Server.MapPath~预感)。 IIS也许认为应用程序已经改变,并且回收的应用,结果抹了所有会话。

这是相似的,如果你在某人正在使用的应用程序修改你的web.config文件,并将其放到所有会话并回收应用程序。你删除可能包含信息的目录IIS正在使用的应用程序?

您说,当你包括该行的代码和会话时才会发生真的会只得到一致消灭了(除非你自己做手工)当应用程序通过IIS或超时回收。这显然是不超时如此循环一定是发生了什么。

其他提示

是您的“文件”文件夹在你的web应用程序文件夹?也许重新启动应用程序本身,当你删除的文件。尝试使用sessionStateServer。它保持会话的活动。

的Web.config:

<configuration>
    <system.web>
        <sessionState mode="StateServer"></sessionState>
    </system.web>
</configuration>

在虚拟目录删除文件夹可能导致应用程序重新开始,而丧失所有会话数据。为了防止这种情况,要么删除单个文件(不是文件夹),或使用StateServer的维护您的会话。

由于你之前正确加载页面按下删除按钮,问题大概是与Session["loginid"].ToString()参考。你有任何其他代码,引用Session["loginid"]?你在这里显示的代码不会做任何事情,可以消除会话loginid

然而,如果这个应用程序在服务器群集上运行,而您正在使用的进程,你可能会失去之间的HTTP会话访问的默认会话模式请求,因为它们是由不同的服务器来处理。请参阅这里获得更多信息。

  

如果删除了directory.delete()   从代码那么整个功能   应用程序运行,从而无需细   任何异常

好吧,看来我们发现您的问题。你的项目没有必要的权限删除direcotry(即使该目录是deleted.nevertheless:有特权的问题)

我想,你的应用程序抛出一个异常,在执行这个文件操作和一个新的会话开始。我有我的一个项目一个类似的情况,但我还没有想出如何解决它。

我敢肯定,如果你创建你将与描述同意的的Global.asax上并设置断点 Application_OnError 的Session_OnStart (或然而,这些方法都正确拼写)。你会看到,引发的错误,之后一个新的会话开始。

首先,几分理智的检查:

  1. 不会议的工作预计在其他网页?
  2. 是你删除的方法删除的文件,在一个特殊的ASP.NET 文件夹,如App_Data或App_Code,这可能会导致应用程序,以重新启动?

这里是我会尝试试这个问题,之后检查上述:

  1. 设置一个断点上删除的方法和拥有在届会变在看窗口。看看有什么价值的话变量是之前的呼叫目录。删除是什么,它是之后。它是在这一点上,当你失去的届会,或者是不直到下一页的访问?
  2. 使用的工具,如小提琴手审查的饼干之间交换浏览器和网络服务器上回发。检查当浏览器的第一次访问一个新的session cookie创建和存储在浏览器。然后,当删除的文件夹中,看到如果网页的服务器发送一个 新的 会议饼干应该回发。这将表明,新的一届会议已创建。

感谢

scroll top