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

时间:2011-03-15 13:13:51

标签: c# javascript asp.net postback refresh

我有一个asp.net应用程序,当我刷新提交表单后生成的网页时。

示例:

<form name="myform" action="mypage.aspx" method="post">

然后显示以下警告。

“如果不重新发送信息,则无法刷新页面。 单击“重试”以再次发送信息, 或单击“取消”返回您尝试查看的页面。“

有两个按钮:

重试 取消

如何避免上述警告并将“取消”视为默认&amp;立即刷新?

谢谢

杰夫

4 个答案:

答案 0 :(得分:6)

您应该使用“Redirect-After-Post”模式。谷歌了解更多信息。但基本上在表单提交上,您的服务器会向客户端发送重定向响应,然后客户端将获取此页面。这是避免您看到的问题的最佳做法:在页面刷新时没有收到令人讨厌的消息,后退按钮没有“破坏”并且它可以防止意外双重提交。您站点上的每个表单都应该实现此模式。

以下是关于在asp.net中实现它的几个问题:

How to use ASP.NET with "Redirect after POST" pattern? [Edited]

Redirect After Post in ASP.NET MVC

答案 1 :(得分:1)

正如我在评论中提到的,您可以将最后一次提交存储在变量(例如会话)中,然后使用重定向来重新访问该页面。经典的“刷新”只是执行最后一个选项,所以现在“无需提交即可刷新”。

但是,根据您要实现的目标,您还可以使用UpdatePanel和“刷新”页面(或者,出于所有意图和目的,使其看起来好像已刷新)。 / p>

编辑:如果用户按下F5,则阻止该操作(如果必须)。在初始页面访问时执行您需要的任何操作,然后将它们自动重定向到“结果”页面。这样任何刷新只会刷新一个“静态”(已经生成/执行动作的)页面。

答案 2 :(得分:1)

杰夫,

昨天我用同一个多页面形式(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

%>

我希望这很有用。祝你好运

答案 3 :(得分:1)

杰夫,

扩展上述评论:

切换

method="post"

为:

method="get"

...或者以不损害数据安全性的方式手动执行此操作。

假设您有两个文本框user / pass登录。 您可以使用此信息创建结构/类,然后生成随机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;

当然这是一个过于简化的例子;但你可以F5你的心愿。