如何在不重新发送信息的情况下刷新网页?

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 并显示

如何在不刷新页面的情况下将值从 jsp 页面发送到数据库

如何在不中断 tkinter 主循环的情况下运行一个函数,同时将该函数的信息发送到我的主循环中的小部件?

如何在不发送 savedInstanceState 的情况下启动新的 Android 活动?