我正在创建一个.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
由于
答案 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。