【问题标题】: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 数据 - 因此没有问题或消息框。

标签: c# javascript asp.net postback refresh


【解决方案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;
        

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

        【讨论】:

          猜你喜欢
          • 2021-12-22
          • 2021-02-05
          • 2016-08-16
          • 1970-01-01
          • 2012-10-05
          • 2014-01-16
          • 2020-05-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多