我有一个带有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发送到浏览器
浏览器再次将请求发送到服务器,但带有新的URL
服务器将新请求的页面发送到浏览器


这完全正确吗?

而第一个选项则省略了上面列表中的前两个步骤,从而节省了额外的往返行程,并导致:


浏览器将请求发送到服务器,但带有新的URL(在LinkBut​​ton中指定的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/

10-11 06:26