我有一个带有查询字符串的页面请求,例如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 是否存在来控制页面的外观。第二个选项按预期工作。
如果我没记错的话,第二个选项需要额外的往返:
- 浏览器向服务器发送请求
- 服务器端的事件处理程序将重定向 URL 发送到浏览器
- 浏览器再次向服务器发送请求,但使用新的 URL
- 服务器向浏览器发送新请求的页面
这完全正确吗?
第一个选项省略了上面列表中的前两个步骤,从而节省了额外的往返时间并导致:
- 浏览器向服务器发送请求,但使用新的 URL(LinkButton 中指定的 PostbackURL)
- 服务器向浏览器发送新请求的页面
但是,如前所述,结果并不相同。
我确信我尝试解释这两个选项之间的差异的尝试在某些地方是错误的。但我不知 Prop 体在哪里。
有人可以解释一下到底有什么区别吗?我真的需要选项 (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/