我有一个带有QueryString的页面请求,例如http://www.xyz.net/Orders.aspx?OrderID=1
。该页面显示在浏览器中。现在页面上有一个asp:LinkButton
,它应使用户可以打开没有QueryString的页面(就像他直接在浏览器的地址栏中输入http://www.xyz.net/Orders.aspx
一样)。
我有两个想法:
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" />
...和...
protected void LinkButton1_Click(object sender, EventArgs e)
{
Response.Redirect("~/Orders.aspx");
}
在这两种情况下,我都希望浏览器的地址栏显示
http://www.xyz.net/Orders.aspx
而不带QueryString。但是在第一种情况下,页面根本不会更改。但是应该这样,因为我正在代码隐藏中评估QueryString并根据QueryString是否存在来控制页面的外观。第二个选项按预期工作。如果我没记错的话,第二种选择需要额外的往返行程:
浏览器向服务器发送请求
服务器端的事件处理程序将重定向URL发送到浏览器
浏览器再次将请求发送到服务器,但带有新的URL
服务器将新请求的页面发送到浏览器
这完全正确吗?
而第一个选项则省略了上面列表中的前两个步骤,从而节省了额外的往返行程,并导致:
浏览器将请求发送到服务器,但带有新的URL(在LinkButton中指定的PostbackURL)
服务器将新请求的页面发送到浏览器
但是,正如所说的,结果是不一样的。
我敢肯定,我试图解释这两个选项之间的差异的地方是错误的。但我不知道确切在哪里。
有人可以解释真正的区别是什么吗?我真的需要选项(2)的第二次往返来实现我想要的吗?
提前致谢!
更新和解决方案
问题(我)的作者已通过该问题证明他不理解HTTP POST和GET之间的区别。对于解决方案,请参见egrunin的答案中的我的评论。
最佳答案
如果您不想访问服务器,为什么不使用纯HTML控件:
function stripQuerystring()
{
return window.location.protocol + "//"
+ window.location.host + window.location.pathname;
}
<input type="button"
onclick="javascript:window.location = stripQuerystring();"
value="Click Me">
关于asp.net - 从带有QueryString的URL重定向到没有QueryString的相同URL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2478930/