4

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

4

2 回答 2

7

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

服务器。传输:

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

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

  • 它只适用于同一个域,它不会重定向到当前域名之外。

  • 它不需要从浏览器返回服务器的往返费用,因此与Response.Redirect.

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

于 2012-11-20T13:59:01.343 回答
2

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

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

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

占位符必须在<pageurl>服务器上设置为您在Server.Transfer呼叫中实际处理的页面的真实 URL。

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

于 2013-02-13T11:22:34.150 回答