【发布时间】:2012-06-15 08:08:46
【问题描述】:
假设我们有两个页面:pageX.aspx 和 pageY.aspx。这些页面利用浏览器顶部的母版页,用户可以在其中更改站点语言的多个选项。这些语言选择采用图像按钮(国家标志)的形式,但它们不使用 PostbackUrl 属性。相反,他们只使用事件处理程序。一种这样的图像处理程序:
protected void imgbtnEnglish_Click(object sender, ImageClickEventArgs e)
{
HttpCookie aCookie = new HttpCookie("language");
aCookie.Value = "en-US";
aCookie.Expires = DateTime.Now.AddDays(365);
Response.Cookies.Add(aCookie);
Response.Redirect(Request.RawUrl);
}
pageX.aspx 包含一个图片按钮,其属性为PostbackUrl="pageY.aspx"。这个图片按钮的唯一目的就是把我们带到pageY.aspx。
当按下该图像按钮时,正如预期的那样,我们将被带到 pageY.aspx。
现在这对我来说是个谜:当我在浏览器中按 BACK(不是控件或其他任何东西,只是好的旧后退按钮)时,我会返回 pageX.aspx,这很棒!...除了,似乎顶部的母版页认为我仍在 pageY.aspx!因为即使我现在回到屏幕上的 pageX.aspx,单击顶部的任何标志都会将我带回 pageY.aspx!
我唯一能从逻辑上推断的是,由于某种原因,由于它是一个 PostbackUrl,并且它将表单提交到服务器,“返回”只能在本地识别为发送的表单,而不是整个页面(包括母版页)。因此,通过“返回”,我实际上只是在表单中“返回”,而不是表单和母版页。
我为解决我的问题所做的是使带我到 pageY.aspx 的图像按钮不使用 PostbackUrl,而是使用带有一行的 Click 事件处理程序:Response .Redirect("pageY.aspx"); 当我这样做时,它工作正常。
我想了解为什么会发生这种情况,以及 Click 事件处理程序解决方案是否是最佳实践/正确的解决方案,而不是使用 PostbackUrl 属性。
【问题讨论】:
-
你用的是Opera浏览器吗?
-
哈,我确实是!...我猜你问这个,可能是浏览器特定的东西?
-
是的,它是特定于浏览器的。我为什么认为它是 Opera 的全部详细信息在我的回答中
标签: c# asp.net master-pages postback navigateurl