我有一个带有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是否存在来控制页面的外观。第二种选择按预期工作。
如果我没错,第二个选项需要额外的往返:
这是否正确?
而第一个选项省略了上面列表中的前两个步骤,因此保存了额外的往返并导致:
但是,如上所述,结果并不相同。
我确信我试图解释这两个选项之间的差异在某处是错误的。但我不知道到底在哪里。
有人可以解释一下真正的区别吗?我是否真的需要第二次往返选项(2)来实现我想要的目标?
提前致谢!
更新和解决方案
问题的作者(我)已经用这个问题证明他不理解HTTP POST和GET之间的区别。有关解决方案,请参阅egrunin的回答中的评论。
答案 0 :(得分:2)
如果您不想访问服务器,为什么不使用纯HTML控件:
function stripQuerystring()
{
return window.location.protocol + "//"
+ window.location.host + window.location.pathname;
}
<input type="button"
onclick="javascript:window.location = stripQuerystring();"
value="Click Me">