我正在创建一个 .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/