【问题标题】:How to use Server.Transfer effectively如何有效地使用 Server.Transfer
【发布时间】:2012-11-20 13:25:23
【问题描述】:

如何使用Server.Transfer("default.aspx") 获得更好的性能 在网站 导航。当我使用它时,它不会更改地址栏中的 url。如何通过 server.transfer 实现新的 url。 或者如果不是)我怎样才能通过Response.Redirect("default.aspx")获得性能

【问题讨论】:

  • 同样的性能是什么意思?理论上,response.Redirect 将运行与 server.transfer 完全相同的代码,唯一的额外延迟将是最小的 http 重定向。
  • 这绝对是不是关于性能,而是关于意图。使用合适的!!!
  • @ChrisBint : 不用花太多时间导航或额外往返
  • @eraj 在我看来,这完全取决于感知。您看不到 server.transfer,但您确实看到了重定向。如前所述,代码本身将保持不变,因此这不是一个因素。您只剩下感知到的体验需要更长的时间。老实说,我对此表示怀疑,无论如何,您无能为力,您可以转移或重定向。

标签: asp.net response.redirect server.transfer


【解决方案1】:

你需要了解Response.Redirect("page.aspx")Server.Transfer("page.aspx")之间的区别

Server.Transfer:

  • 它不会改变 URL,所以它不是用于调试目的 因为您不确定浏览器中哪个页面正在运行 因为 URL 可能不会在多个 Server.Transfer 中更改 声明。

  • 它将表单上所有控件的数据发布到下一页,从 您可以在其中使用 Request.Form["myTextBox"]

  • 访问它们
  • 它只在同一个域内有效,它不会重定向到外部 当前域名。

  • 从浏览器返回服务器不需要花费往返,所以它是 比Response.Redirect 更快。

请根据您的最佳判断何时使用Response.Redirect 以及何时使用Server.Transfer。如果您想将表单控件的数据从一个页面发送到另一个页面,我只建议使用“Server.Transfer”,否则会给您带来调试噩梦。

【讨论】:

  • 是的。完全同意你的看法,但我想要更多。是否可以在带有 server.transfer 的下一页中添加新的 url?或者如何有效地处理 response.redirect?
  • @eraj - 在Server.Transfer 期间,没有任何内容被发送回浏览器。无论传输的页面在输出时产生什么,都会被发送回浏览器。作为回应,没有机制说“请现在将地址栏调整为 此值” - 想象一下网络钓鱼者可以通过这种机制获得的乐趣。如果你想让浏览器知道它在哪个页面上,Response.Redirect
  • Eraj,这是不可能的。您不能使用Server.Transfer 修改 URL。然后调用 Server.Transfer,它会直接从服务器重定向到下一页,而不会将控制权发送回浏览器。但是当您调用 Response.Redirect 时,它会将响应发送回浏览器。然后浏览器将页面重定向到新页面,同时更改其 URL。我希望能回答您的问题,如果是,请将其标记为“已回答”。
  • @raheel khokhar:感谢您的回复。但这些都是关于 server.transfer() 和 response.redirect() 中使用的机制。我想要诸如设置或代码之类的答案,以说明处理重定向的有效方法。
  • 我个人认为你不能提高 Response.Redirect 的性能,因为它将遵循它应该遵循的完整机制:
    来自客户端的事件 >> 回帖到服务器 > > 运行重定向代码 >> 将响应发送回浏览器 >> 浏览器重定向到新页面 但是如果您使用基于 javascript 的重定向,您将节省大量上述步骤:来自客户端的事件 >> 运行重定向代码 >> 浏览器重定向到新页面。您可以尝试使用: yahoo.com';" />
【解决方案2】:

我不确定我是否喜欢这种方法,但如果您坚持使用 Server.Transfer,您可以使用 HTML5 History API 在您的响应到达浏览器并在那里处理后更改浏览器地址栏中的 URL .请注意,只有较新的浏览器支持此功能,但随着时间的推移,这应该不再是一个问题。

您需要在页面中使用一段 JavaScript 来操纵历史的当前状态。这看起来像:

<script type="text/javascript">
    window.history.pushState({ path: <pageurl> }, '', <pageurl>);
</script>

&lt;pageurl&gt; 占位符必须在服务器上设置为您在 Server.Transfer 调用中实际处理的页面的真实 URL。

现在网上有很多关于如何使用 html5 history api 的例子,例如http://html5demos.com/history.

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 2012-05-25
    • 1970-01-01
    • 2011-07-09
    • 2015-07-01
    • 2012-03-16
    • 1970-01-01
    • 2011-10-09
    • 2013-02-12
    相关资源
    最近更新 更多