使用ASP.net刷新/重新加载副作用?

时间:2009-08-20 22:50:54

标签: asp.net postback

我在网络上比较新。 ASP.Net开发,所以请耐心等待。在测试我们的网页的过程中,我注意到如果用户单击“刷新/重新加载”,并在“重新发送信息”对话框上出现提示时单击“重试”,则在用户选择之前触发的最后一个事件“刷新”,随后将被解雇。
作为一个例子,我们有“上一页”和“下一页”导航按钮,允许用户浏览一系列问题。如果操作员点击“刷新/重新加载”,那么用户按下最后一个导航按钮将再次点火。这实际上是有道理的,但净效果是用户最终在他以前查看的下一页或上一页上。这种事情有解决方法吗?

2 个答案:

答案 0 :(得分:4)

这是由于您处理PostBacks的方式。

需要一些背景知识:

网络是“无状态的”,这意味着从客户端到服务器的每个请求都与之前的请求或之后的请求无关。没有“国家”维持。如果您查看HTTP级别,它只是发送到服务器的文本blob,上面写着“向我发送此信息”,然后服务器将其发送回去。没有“我是3分钟前在这里的同一个用户,我想从上次发言时转到下一页”。

ASP.NET解决此问题的方法是使用ViewState和回发。每次单击ASP.NET按钮时,它实际上都是提交一个包含隐藏字段和一堆编码数据的表单。该数据包含服务器需要“重建”页面状态的信息的所有,因为它是最后一次。然后它可以执行“移动到下一页”,该命令是有意义的。当ASP.NET将HTML发送回客户端时,它会使用新数据更新该隐藏字段,再次表示页面状态,就像现在一样。下次单击任何按钮时,将再次发送数据,再次重新构建页面并重复循环。

当用户点击“刷新”时,浏览器会询问他们是否要重新提交表单。他们正在重新提交他们上一次所做的相同数据。

对您的影响:

如果您尝试跟踪有关用户的任何数据或他们独立于ASP.NET ViewState执行的操作,则需要确保每次页面处理时都同步。

您可能希望在ViewState中保留“当前页面”:

ViewState.Add("CurrentPage", intCurrentPage);

因此,当您调用MoveNext事件处理程序时,您可以确定您是相对于该页面移动的,因为它是最后一次发送到客户端。

答案 1 :(得分:1)

您可以查看asp.net mvc中更常用的Post-Redirect-Get模式。

有关详细信息,请参阅here