假设我们有两个页面: 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 属性。