按Back Browser按钮会丢失上一页状态

时间:2011-01-01 17:00:27

标签: c# javascript .net jquery

我正在创建一个.net应用程序,在主页面上我动态创建一些文本框。

<div>
Enter how much pets you have : <input type="text" id="amount" />
<input type="button" value="Submit" id="btn" />
 <script type="text/javascript">
 $(document).ready(function()
{
   $("#btn").click(function()
   {
      var i = 0;
      for(i = 0; i <= $("#amount").val(); i++)
      {
         $("#Names").append("<p>Name " + i.toString() + ":<input id='name" + i.toString() + " type='text' class='nameInput'/>");
      }
   });

   $("#SubmitNames").click(function()
   {
      $.getJSON("names.aspx",$(".nameInput"),function(data)
      {
          if(data.Status == "Success")
          {
              window.location.href = "step2.aspx";
          }
      });
   });
});
</script>
</div>
           

当用户点击提交名称时,会将其重定向到step2.aspx

直到这里一切正常!

问题在用户返回时开始(“点击后面的浏览器按钮”),之前的整个状态都会丢失。

用户必须再次输入所有名称。

我想我错过了一些东西。我需要通过AJAX进行数据传输。

你能帮帮我吗?你有什么建议?

我正在使用.NET c#VS2008

由于

4 个答案:

答案 0 :(得分:2)

我不认为这会起作用。单击后退按钮时,它会从缓存重新加载页面。该缓存不包括您通过javascript进行的更改。所以它正在重新加载基页,然后重新执行javascript,创建一组全新的空控件。

你最好保存提交给隐藏字段的值(可能使用json),然后在下一个表单上有一个“返回”按钮,然后在隐藏字段包含数据的情况下重新加载控件状态。

编辑:

由于您没有提交任何内容,或许您可以修改“names.aspx”以返回在未传递任何数据时输入的名称。然后在第一步中,您可以执行ajax调用以检索可能设置的任何名称,如果没有返回任何名称则不执行任何操作。

但是,我应该注意,以这种方式使用GET是非常不寻常的,并且根据HTTP规范,get不应该改变对象的状态(你似乎在做什么)。

答案 1 :(得分:1)

这是因为您通过ajax添加输入字段..浏览器不知道您发布的内容 例如,当您POST并进入下一页并返回时,您将在发布之前获得字段中的所有给定信息。

我认为即使你缓存它,它也会起作用..因为浏览器输入字段的数量不存在..

所以您可以尝试的是使用$.getJSON尝试使用$.ajax({ cache: true })小示例here

如果那不起作用我会建议设置一个cookie,并在加载页面时检查是否有cookie。

古德勒克

答案 2 :(得分:0)

您是否检查过服务器发送给客户端的HTTP标头的过期/缓存设置?

当用户点击“返回”按钮时,这通常会影响页面是重新加载还是从缓存中拉出。

答案 3 :(得分:0)

尝试Ben Almans BBQ plugin。这很棒。它利用哈希标记将更改持久保存到浏览器历史记录缓存中。 UI标签演示here

相关问题