c# - 按“后退浏览器”按钮将丢失上一页状态

标签 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

谢谢

最佳答案

我认为这行不通。当您单击后退按钮时,它会从缓存中重新加载页面。该缓存不包含您通过 JavaScript 所做的更改。因此它会重新加载基本页面,然后重新执行 JavaScript,创建一组全新的空控件。

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

编辑:

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

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

关于c# - 按“后退浏览器”按钮将丢失上一页状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4574805/

相关文章:

javascript - 如何 Jest 测试这个正则表达式

javascript - 自动转换GMT时间

c# - 我应该使用哪种优化算法来最大化时间限制的利润?

.net - 等待任务 x 时间并报告进度

c# - 如何从 MSBuild 代码分析中获取 XML 报告

c# - 如何知道TextEdit中当前的可见性偏移量?

c# - 异步/等待 vs BeginRead、EndRead

c# - 如何在 SaveContext 上更新修改和删除的实体?

javascript - 将 HTML 表单输入分配给 Node JS 中的变量

pythonnet clr 在 jupyter notebook 中无法识别