代码之家  ›  专栏  ›  技术社区  ›  Kirschstein

ASP.NET缓存页。状态已保存,但需要刷新

  •  0
  • Kirschstein  · 技术社区  · 17 年前

    我有一个webforms页面,它非常广泛地使用ajax。它上面有许多链接,可以让用户转到不同的页面。如果用户使用浏览器的“后退”按钮返回页面,我希望保持页面的状态。

    我所做的就是在每次用户与页面交互时,在会话中存储页面的状态。当它们返回到页面时,如果会话中存在状态,则会将其加载并显示给用户。

    我有这种工作。页面已正确保存,并且可以正确加载,但不幸的是,需要页面刷新(F5)才能加载它,否则它将恢复到以前的状态。

    知道为什么没有刷新页面就不能正确呈现吗?我该怎么解决这个问题呢?

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
    
        if (!Page.IsPostBack)
        {
            DataBindDropDowns();
    
            if (HasQueryString())
            {
                SetOptionsFromQueryString();
                SavePageToSession();
                Response.Redirect("Default.aspx");
            }
            else
            {
                RestoreFromSession();
                DisplayOptions();
            }
        }
    }
    
    3 回复  |  直到 15 年前
        1
  •  0
  •   Community Mohan Dere    9 年前

    是否使用“加载”事件初始化页面?当用户按下后退按钮时,“加载”事件不会激发,但“dom content ready”事件会激发。

    见:

    Is there a cross-browser onload event when clicking the back button?

    如果您使用的是jquery,请尝试将页面初始化逻辑置于就绪事件中,并且应该是好的。如果您不使用jquery,请找到适当的方法连接到DOM内容加载/就绪事件,并使用它来初始化页面。

    如果它仍然不起作用,请发布您的代码,以便我们可以调试问题。

    编辑:

    似乎您希望设置适当的过期标题,以便单击后退按钮时浏览器将重新加载页面。尝试以下页面中的代码:

    http://www.352media.com/rantingandraving/rave.aspx?raveid=325&id=212

        2
  •  0
  •   BigBlondeViking    17 年前

    这是我基于pageload而不是firing的猜测…

    我敢打赌.aspx文件正在用缓存头发送到客户端…

    拉上fire bug或fiddler,看到它maxage http响应头来自您的服务器。

    如果是这样的话,这就是需要删除的内容,因为浏览器没有重新请求文件,因为有人告诉它不要这样做。

        3
  •  0
  •   King Friday    15 年前

    HTML5离线存储是另一个选择,非常令人惊讶,因为它在IE8问世以来的所有主要浏览器中都能工作。

    我做了一个jquery插件,用于保存表单状态以返回用户: http://www.jasonsebring.com/dumbFormState 这完成了你所说的大部分工作,与服务器端无关,甚至可以在HTML页面中工作。

    我还可以添加其他一些功能,比如保存表单的完整性,这样就不需要在额外的页面点击上呈现它。我的重点是保存用户自动做出的实际选择,然后当用户返回时,表单选择仍然处于它们停止的位置,您可以通过表单实例从会话或本地存储中删除它们。这是一个勇敢的进入HTML5的新世界,随着新浏览器清除过去的问题,将会有许多旧的范例消失。维护表单状态无疑是一个巨大而古老的问题,所有的使用都想放弃。

    Javascript最近才变得更强大,所以你应该掌握HTML5的技能。我建议阅读、聆听和观看Douglas Crockford的所有内容,因为你对认真对待javascript的怀疑将消失,你会发现闭包是编程中除了变量和函数之外最好的东西。