【问题标题】:How to preserve "post data" on redirect如何在重定向时保留“发布数据”
【发布时间】:2013-12-06 10:19:15
【问题描述】:

我想将帖子从 /mynode 重定向到 /eng/mynode/ 并保留表单数据。 我已经尝试过“Server.Transfer”,但我收到一条错误消息“执行 /en/mynode 的子请求时出错”。

我想以一般方式实现这一点,例如在基页的 OnPreInit() 方法中。

您还有其他选择吗?

附:当您使用 Server.Transfer 时,“转移到的页面应该是另一个 .aspx 页面。例如,转移到 .asp 或 .asmx 页面是无效的”。见source

【问题讨论】:

  • 请解释一下:为什么它不能回答您的问题?
  • Server.Transfer 需要一个 .aspx 页面。当我写 Server.Transfer("~/eng/mynode") 我得到一个错误:“执行子请求时出错”
  • 是的,abhitalks 的回答并没有说您应该使用 Server.Transfer - 这与跨页面回发完全不同(事实上,它不会更改用户浏览器中的 URL! )。跨页回发允许您从下一页中的上一页获取数据 - 因此您可以跨页回发到您的目的地,它也会有您当前页面的实例。大多数情况下。
  • 是的,看到你的 URL 我可以想象你会。我担心您可能必须按照@OndrejSvejdar 建议的方式进行操作。为了进一步扩展,当服务器代码重定向请求(即更改客户端 URL)时,它通过发送状态代码为 3** 的 HTTP 响应并指定目标 URL 来实现。这不允许您发送任何 POST 数据(仅 GET 数据),因此您必须通过将客户端代码发送到您的页面来重新提交来解决此问题。

标签: asp.net http redirect webforms


【解决方案1】:

我想你可以这样写:

protected void Page_Load(object sender, EventArgs e) {
  Response.Clear();
  Response.Write(@"<html>");
  Response.Write(@"<body>");
  Response.Write(@"<form id=""form"" action=""/eng/mynode/"" method=""post"" enctype=""application/x-www-form-urlencoded"">");
  for(int i = 0; i < Request.Form.Count; i++) {
    var key = Request.Form.GetKey(i);
    var values = Request.Form.GetValues(i);
    foreach(var value in values) {
      Response.Write(string.Format(@"<input type=""hidden"" name=""{0}"" value=""{1}"" />", key, Server.HtmlEncode(value)));
    }
  }
  Response.Write(@"</form>");
  Response.Write(@"<script>document.getElementById(""form"").submit();</script>");
  Response.Write(@"</body>");
  Response.Write(@"</html>");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-21
    • 2015-02-05
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 2016-05-18
    • 2020-09-24
    • 2011-11-22
    相关资源
    最近更新 更多