我有一个asp.net应用程序,当我刷新提交表单后生成的网页时。
示例:
<form name="myform" action="mypage.aspx" method="post">
然后显示以下警告。
“如果不重新发送信息,则无法刷新页面。 单击“重试”以再次发送信息, 或单击“取消”返回您尝试查看的页面。“
有两个按钮:
重试 取消
如何避免上述警告并将“取消”视为默认&amp;立即刷新?
谢谢
杰夫
答案 0 :(得分:6)
您应该使用“Redirect-After-Post”模式。谷歌了解更多信息。但基本上在表单提交上,您的服务器会向客户端发送重定向响应,然后客户端将获取此页面。这是避免您看到的问题的最佳做法:在页面刷新时没有收到令人讨厌的消息,后退按钮没有“破坏”并且它可以防止意外双重提交。您站点上的每个表单都应该实现此模式。
以下是关于在asp.net中实现它的几个问题:
How to use ASP.NET with "Redirect after POST" pattern? [Edited]
答案 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你的心愿。