我有一个asp.net应用程序,当我刷新表单提交后生成的网页。如何在不重新发送信息的情况下刷新网页?
实施例:
<form name="myform" action="mypage.aspx" method="post">
然后显示了下面的警报。 “
”无法重新发送页面而不重新发送信息。 单击重试以再次发送信息, 或单击取消返回到您尝试查看的页面。
有两个按钮:
重试取消
我怎样才能避免上述警报,并采取“取消”作为默认立即刷新&?
谢谢
杰夫
我有一个asp.net应用程序,当我刷新表单提交后生成的网页。如何在不重新发送信息的情况下刷新网页?
实施例:
<form name="myform" action="mypage.aspx" method="post">
然后显示了下面的警报。 “
”无法重新发送页面而不重新发送信息。 单击重试以再次发送信息, 或单击取消返回到您尝试查看的页面。
有两个按钮:
重试取消
我怎样才能避免上述警报,并采取“取消”作为默认立即刷新&?
谢谢
杰夫
您应该使用“重定向后邮件”模式。 Google了解更多信息。但基本上在表单提交您的服务器发送重定向响应到客户端,然后获取此页面。这是避免您看到的问题的最佳做法:您不会在页面刷新时收到烦人的消息,后退按钮不会“断开”,并且可以防止意外的双重提交。真的每窗体在您的网站上应该实现这种模式。
这里有一对夫妇在asp.net实现它的问题:
How to use ASP.NET with "Redirect after POST" pattern? [Edited]
正如我在评论中提到,你可以存储在一个变量(如会议)最后一次提交,然后使用重定向重新访问该网页。经典的“刷新”就是执行最后一个选项,所以现在就是“无需提交刷新”的方式。
但是,根据您要达到的目标,您也可以使用UpdatePanel和“刷新”页面(或者为了所有意图和目的,使其看起来像刷新一样)。
编辑:如果用户按下F5,则阻止该动作(如果它是必要的)。在初始页面访问时执行所需的任何操作,然后将其自动重定向到“结果”页面。这样,任何刷新只是刷新一个“静态”(已经生成/执行的)页面。
杰夫,
我昨天有同样的问题,以多页形式(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
%>
我希望这是有益的。祝你好运
杰夫,
为了扩大上述评论:
要么切换
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你心中的渴望。
您可以将先前发送然后执行重定向,而不是一个刷新的信息。 – 2011-03-15 13:15:56
+1 @Brad,这样数据不能被存储两次。所以它也更安全。 – pimvdb 2011-03-15 13:17:09
是的,但如果用户按下F5按钮? – 2011-03-15 13:19:32