从具有QueryString的URL重定向到没有QueryString的相同URL

时间:2010-03-19 16:32:19

标签: asp.net redirect postback query-string

我有一个带有QueryString的页面请求,比如http://www.xyz.net/Orders.aspx?OrderID=1。该页面显示在浏览器中。现在页面上有一个asp:LinkButton,用户可以在没有QueryString的情况下打开页面(好像他已直接在浏览器的地址栏中输入http://www.xyz.net/Orders.aspx)。

我有两个想法:

1)使用LinkBut​​ton的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发送到浏览器
  • 浏览器再次向服务器发送请求,但使用新网址
  • 服务器向浏览器发送新请求的页面

这是否正确?

而第一个选项省略了上面列表中的前两个步骤,因此保存了额外的往返并导致:

  • 浏览器向服务器发送请求,但使用新网址(LinkBut​​ton中指定的PostbackURL)
  • 服务器向浏览器发送新请求的页面

但是,如上所述,结果并不相同。

我确信我试图解释这两个选项之间的差异在某处是错误的。但我不知道到底在哪里。

有人可以解释一下真正的区别吗?我是否真的需要第二次往返选项(2)来实现我想要的目标?

提前致谢!

更新和解决方案

问题的作者(我)已经用这个问题证明他不理解HTTP POST和GET之间的区别。有关解决方案,请参阅egrunin的回答中的评论。

1 个答案:

答案 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">