我有一个带有查询字符串的页面请求,比如说
我有两个想法:
1)使用 LinkButton 的
在这两种情况下,浏览器的地址栏都显示
如果我没错的话,第二个选项需要额外的往返:
- 浏览器发送请求到服务器 - 服务器端的事件处理程序将重定向 URL 发送到浏览器 - 浏览器再次发送请求到服务器,但使用新的 URL - 服务器将新请求的页面发送给浏览器
这正确吗?
而第一个选项省略了上面列表中的前两个步骤,从而节省了额外的往返,并导致:
- 浏览器向服务器发送请求,但使用新的 URL(在 LinkButton 中指定的 PostbackURL) - 服务器将新请求的页面发送给浏览器
但是,正如所说的那样,结果并不相同。
我确信我试图解释两个选项之间差异的方式有些错误。但我不知道具体是哪里出了问题。
有人能解释一下真正的区别吗?我真的需要第二个选项的这个额外往返来实现我想要的吗?
提前感谢!
http://www.xyz.net/Orders.aspx?OrderID=1
。该页面在浏览器中显示。现在页面上有一个 asp:LinkButton
,它应该允许用户打开不带查询字符串的页面(就像他直接在浏览器地址栏中输入 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" />
...and...
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) - 服务器将新请求的页面发送给浏览器
但是,正如所说的那样,结果并不相同。
我确信我试图解释两个选项之间差异的方式有些错误。但我不知道具体是哪里出了问题。
有人能解释一下真正的区别吗?我真的需要第二个选项的这个额外往返来实现我想要的吗?
提前感谢!
PostBackUrl
属性的LinkButton不是基本上做同样的事情吗:将页面请求的URL更改为没有QueryString的URL?我的代码中URL是硬编码的,而你的脚本当然更通用。但在我的特殊示例中,为什么结果不一样呢? - Slaumaasp:HyperLink
,而不是带有PostBackUrl的LinkButton。我现在已经看到,在后台代码中的一个重要的区别是,在HyperLink的情况下,IsPostBack==false
,而在LinkButton的情况下,IsPostBack==true
,这解释了完全不同的行为。但是使用asp:HyperLink基本上与您的解决方案相同。再次感谢您指导我朝着正确的方向! - Slauma