为什么在页面空闲一段时间后,数据不传递给客户端?

Why isn't data passed to the client after a page has been idle for some time?

本文关键字:数据 客户端 一段时间 为什么      更新时间:2023-09-26

我有一个网站(ASP。. NET webforms),并使用jQuery插件在客户端构建树。为此,我用StringBuilder构建一个字符串,然后像这样拥有我的数据:

dataForTree = "var data=" + sb.ToString() + ";";

然后通过使用RegisterClientScriptBlock将其传递给树,如下所示:

if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "allData"))
{
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "allData", dataForTree, true);
}

在我的客户端上,我收到这样的数据:

<script type="text/javascript">
$(function () {
    $("#myTree").dynatree({
        children:   $(data)
        });
});

现在我知道数据是正确传递的,因为我在加载时得到了正确的treeview,一切都很好。当我激活一个节点时,我需要显示关于这个节点的一些数据,因此我进行回发以应用到服务器,然后再次传递数据。这个也可以,一切都显示得很好。

然后我离开这个页面一段时间,仅仅几分钟就足够了,并再次激活节点。问题就来了。我的树消失了。当我在Chrome调试器或Firebug中查看代码时,我看到数据变量不存在。不过,我重复一遍,我在每次回发时都将它传递给客户机。为什么会这样,我从来不知道。说真的,我已经被它弄得头破脑裂了,我就是不明白它为什么是这个样子。

如果你使用的是unupdatepanel,记得在PreInit中检查Session是否过期:

     protected override void OnPreInit(EventArgs e)
     {
         if (Session["User"]==null )
            Response.Redirect("~/Login.aspx");
     }