2011-03-15 253 views
1

我有一个asp.net应用程序,当我刷新表单提交后生成的网页。如何在不重新发送信息的情况下刷新网页?

实施例:

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

然后显示了下面的警报。 “

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

有两个按钮:

重试取消

我怎样才能避免上述警报,并采取“取消”作为默认立即刷新&?

谢谢

杰夫

+3

您可以将先前发送然后执行重定向,而不是一个刷新的信息。 – 2011-03-15 13:15:56

+0

+1 @Brad,这样数据不能被存储两次。所以它也更安全。 – pimvdb 2011-03-15 13:17:09

+0

是的,但如果用户按下F5按钮? – 2011-03-15 13:19:32

回答

6

您应该使用“重定向后邮件”模式。 Google了解更多信息。但基本上在表单提交您的服务器发送重定向响应到客户端,然后获取此页面。这是避免您看到的问题的最佳做法:您不会在页面刷新时收到烦人的消息,后退按钮不会“断开”,并且可以防止意外的双重提交。真的窗体在您的网站上应该实现这种模式。

这里有一对夫妇在asp.net实现它的问题:

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

Redirect After Post in ASP.NET MVC

1

正如我在评论中提到,你可以存储在一个变量(如会议)最后一次提交,然后使用重定向重新访问该网页。经典的“刷新”就是执行最后一个选项,所以现在就是“无需提交刷新”的方式。

但是,根据您要达到的目标,您也可以使用UpdatePanel和“刷新”页面(或者为了所有意图和目的,使其看起来像刷新一样)。

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

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 

%> 

我希望这是有益的。祝你好运

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你心中的渴望。

相关问题