我有一个带有QueryString的页面请求,比如http://www.xyz.net/Orders.aspx?OrderID=1
。该页面显示在浏览器中。现在,页面上有一个asp:LinkButton
,它应该使用户能够在不使用QueryString的情况下打开页面(就像他直接在浏览器的地址栏中输入http://www.xyz.net/Orders.aspx
一样)。从带有QueryString的URL重定向到没有QueryString的同一个URL
我有两个想法:
1)使用的LinkButton的PostBackUrl
属性:
<asp:LinkButton ID="LinkButton1" runat="server" Text="Select"
PostBackUrl="~/Orders.aspx" />
2)在事件处理程序使用 “的redirectUrl”:
<asp:LinkButton ID="LinkButton1" runat="server" Text="Select"
OnClick="LinkButton1_Click" />
.. .and ...
protected void LinkButton1_Click(object sender, EventArgs e)
{
Response.Redirect("~/Orders.aspx");
}
在这两种情况下,浏览器的地址栏都显示http://www.xyz.net/Orders.aspx
,但没有QueryString,因为我喜欢它。但在第一种情况下,页面根本不会改变。但它应该,因为我在代码隐藏中评估QueryString并根据QueryString是否存在来控制页面的外观。第二个选项按预期工作。
如果我没看错的第二个选项需要额外来回:
- 浏览器发送请求到服务器 在服务器端
- 事件处理程序发送重定向URL到浏览器
- 浏览器再次发送请求到服务器,但随着新的URL
- 服务器发送新的请求的页面到浏览器
这是否正确?
而第一选项省略该列表中的前两个步骤的上方,从而节省了额外的往返并且导致:
- 浏览器发送请求给服务器,但用新的URL(一项PostBackUrl指定在LinkButton的)
- 服务器发送新的请求的页面到浏览器
但是,正如所说,结果是不一样的。
我敢肯定,我尝试解释两个选项之间的差异是错误的地方。但我不知道究竟在哪里。
有人能解释真正的区别吗?我真的需要第二个选项(2)来实现我想要的吗?
在此先感谢!
更新和解决方案
问题的作者(我)已经证明了这个问题,他不理解HTTP POST之间的区别和GET。有关解决方案,请参阅我在egrunin的回答中的评论。
谢谢,它的工作原理!但为什么?为什么不是我的问题中的第一个选项? LinkButton的'PostBackUrl'属性是否基本相同:将页面请求的URL更改为不使用QueryString的URL? URL是在我的代码中硬编码的,而你的脚本当然是更一般的。但在我的特例中:为什么结果不一样? – Slauma 2010-03-19 17:05:10
@egrunin:忘记我评论中的问题。我不明白POST和GET之间的区别。我实际上应该做的是使用'asp:HyperLink'和'NavigateUrl'属性,而不是带有PostBackUrl的LinkButton。我现在已经看到,代码隐藏的重要区别在于,如果HyperLink为“IsPostBack == false”,而LinkButton为“IsPostBack == true”则解释完全不同的行为。但使用asp:HyperLink与您的解决方案基本相同。再次感谢您指点我正确的方向! – Slauma 2010-03-19 17:26:51