我在网络和ASP.Net开发方面比较新,所以请耐心等待.在测试我们的网页的过程中,我注意到如果用户单击"刷新/重新加载",并在"重新发送信息"对话框上出现提示时单击"重试",则在用户选择之前触发的最后一个事件"刷新",随后将再次解雇.
作为一个例子,我们有"上一页"和"下一页"导航按钮,允许用户浏览一系列问题.如果操作员点击"刷新/重新加载",那么用户按下最后一个导航按钮将再次点火.这实际上是有道理的,但净效果是用户最终在他以前查看的下一页或上一页上.这种事情有解决方法吗?
这是由于您处理PostBacks 的方式所致。
有必要了解一些背景知识:
Web 是“无状态的”,这意味着从客户端到服务器的每个请求都独立于其之前的请求或之后的请求。没有维护“状态”。如果您查看 HTTP 级别,您会发现它只是发送到服务器的一个文本 blob,上面写着“向我发送此信息”,然后服务器将其发回。不存在“我是 3 分钟前访问过的用户,我想从上次交谈时所在的页面转到下一页”的情况。
ASP.NET 解决此问题的方法是使用 ViewState 和回发。每次单击 ASP.NET 按钮时,它实际上是在提交一个表单,该表单有一个隐藏字段,其中包含一堆编码数据。该数据包含服务器“重建”页面上次状态所需的所有信息。然后它可以执行“移至下一页”并且该命令有意义。当 ASP.NET 将 HTML 发送回客户端时,它会使用新数据更新该隐藏字段,再次代表页面的状态,就像现在一样。下次点击任何按钮时,数据会再次发送,页面会再次重建,如此循环往复。
当用户点击“刷新”时,浏览器会询问他们是否要重新提交表单。他们正在重新提交上次提交的相同数据。
对您的影响:
如果您尝试独立于 ASP.NET ViewState 跟踪有关用户或他们正在执行的操作的任何数据,则需要确保每次页面处理时都进行同步。
您可能想将“当前页面”保留在 ViewState 中:
ViewState.Add("CurrentPage", intCurrentPage);
Run Code Online (Sandbox Code Playgroud)
因此,当您调用MoveNext事件处理程序时,您可以确定您正在相对于页面移动,因为这是上次将页面发送到客户端时的情况。
| 归档时间: |
|
| 查看次数: |
1153 次 |
| 最近记录: |