如何在不重新发送信息的情况下刷新网页?
Posted
技术标签:
【中文标题】如何在不重新发送信息的情况下刷新网页?【英文标题】:How can I refresh a web page without resending the information? 【发布时间】:2011-07-15 19:06:16 【问题描述】:我有一个 asp.net 应用程序,当我刷新提交表单后生成的网页时。
例子:
<form name="myform" action="mypage.aspx" method="post">
然后显示以下警报。
"如果不重新发送信息,则无法刷新页面。 单击重试以再次发送信息, 或单击取消返回您尝试查看的页面。”
有两个按钮:
重试 取消
如何避免上述提示,将“取消”设为默认并立即刷新?
谢谢
杰夫
【问题讨论】:
您可以存储之前发送的信息,然后执行重定向而不是刷新。 +1 @Brad,这样数据也不能存储两次。所以它也更安全。 是的.. 但是如果用户按下 F5 按钮? 就个人而言,我总是将信息存储在某处并重定向页面,这样后退/刷新按钮就不会出现意外行为 然后它将重新加载已重定向到的页面,没有 POST 数据 - 因此没有问题或消息框。 【参考方案1】:您应该使用“Redirect-After-Post”模式。谷歌了解更多信息。但基本上在提交表单时,您的服务器会向客户端发送重定向响应,然后客户端会获取此页面。这是避免您看到的问题的最佳实践:您不会在页面刷新时收到烦人的消息,后退按钮没有“损坏”,它可以防止意外的重复提交。您网站上的每个表单都应该实现这种模式。
这里有几个关于在 asp.net 中实现它的问题:
How to use ASP.NET with "Redirect after POST" pattern? [Edited]
Redirect After Post in ASP.NET MVC
【讨论】:
【参考方案2】:正如我在评论中提到的,您可以将最后一次提交存储在变量中(例如会话),然后使用重定向重新访问该页面。经典的“刷新”只是执行最后一个选项,所以现在是“不提交刷新”的方式。
但是,根据您要实现的目标,您还可以使用 UpdatePanel 并“刷新”页面(或者,出于所有意图和目的,使其看起来好像已刷新)。
编辑:如果用户按 F5,则阻止该操作(如果它是必要的)。在初始页面访问时执行您需要的任何操作,然后将它们自动重定向到“结果”页面。这样一来,任何刷新都只会刷新“静态”(已生成/已执行)页面。
【讨论】:
【参考方案3】:杰夫,
昨天我在使用多页表单(4 个单独的步骤)时遇到了同样的问题。我最终所做的是创建了一个“处理程序”文件并用它来处理发布的数据,然后重定向到我想要的页面。这可以解决“重新发送”问题,因为数据只会发布到专门处理它的页面。
我的 html 表单:
<form action="handler.asp" method="post">
<input type="text" name="firstName" />
<input type="submit" value="Send Data" />
<input type="hidden" name="action" value="displayName" />
</form>
在我的 handler.asp 中:
<%
if Request.Form("action") = "displayName" Then
' Do whatever is needed here.
' After you're done
' Send the user where you want them to go
Response.Redirect("default.asp?status=thanks")
End If
%>
我希望这是有用的。祝你好运
【讨论】:
【参考方案4】:杰夫,
扩展上述 cmets:
任意切换
method="post"
到:
method="get"
...或者手动执行此操作,不会危及您数据的安全性。
假设您使用两个文本框用户/密码登录。 您可以使用此信息创建一个结构/类,然后生成一个随机 GUID。
做一些类似的事情:
Session[GUID] = new MyPostInformationClass() login = txtLogin.Text, pass = txtPass.Text;
然后:
Response.Redirect("mypage.aspx?guid=" + GUID);
然后在 Page_Load 上:
MyPostInformationClass usr = (MyPostInformationClass)Session[GUID];
String login = usr.login;
String pass = usr.pass;
当然这是一个过于简化的例子;但你可以按你的心愿去做。
【讨论】:
以上是关于如何在不重新发送信息的情况下刷新网页?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不重新加载页面的情况下将任意 JSON 发送到 node.js?
如何在不刷新页面的情况下将数据从 Android 发送到 PHP 并显示