asp.net - 刷新/重新加载 ASP.net 的副作用?

标签 asp.net postback

我在 Web 和 ASP.Net 开发方面还比较陌生,所以请耐心等待。在测试我们的网页的过程中,我注意到,如果用户单击“刷新/重新加载”,并在“重新发送信息”对话框提示时单击“重试”,则无论用户选择之前触发的最后一个事件如何到“刷新”,随后将再次被触发。
作为示例,我们有“上一个”和“下一个”导航按钮,允许用户浏览一系列问题。如果运算符(operator)点击“刷新/重新加载”,则用户最后按下的导航按钮将再次触发。这实际上有一定道理,但最终的结果是用户最终进入了他之前查看的下一页或上一页。对于这种事情有解决办法吗?

最佳答案

这是由于您处理 PostBacks 的方式造成的.

需要一些背景知识:

网络是“无状态的”,这意味着从客户端到服务器的每个请求都独立于它之前的请求或之后的请求。没有维护“状态”。如果您查看 HTTP 级别,您会发现它只是发送到服务器的一个文本 blob,上面写着“向我发送此信息”,然后服务器将其发回。不会出现“我是 3 分钟前访问过的用户,我想从上次交谈时所在的页面转到下一页”的情况。

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

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

对您的影响:

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

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

ViewState.Add("CurrentPage", intCurrentPage);

因此,当您调用 MoveNext 事件处理程序时,您可以确定您正在相对于页面移动,因为这是上次将页面发送到客户端时的情况。

关于asp.net - 刷新/重新加载 ASP.net 的副作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1309264/

相关文章:

c# - 错误,因为输入字符串的格式不正确

asp.net - 与多行 asp :TextBox on full postback vs. 异步回发不同的换行符

c# - 用户控制回传

asp.net - AsyncPostBackTrigger EventName - 如何确定?

c# - FileUpload 控件在第二次单击时起作用,但不是第一次尝试保存发布的文件?

C# 重载 try/catch

c# - 以字典作为数据源的 GridView

javascript - 验证 ASP.NET 客户端中的复选框列表

.net - 在更新面板中提交表单后运行 javascript?

c# - 如何在使用 C# 作为服务器代码的 ASP.NET Web 应用程序中使用 WF (Windows Workflow Foundation)