【问题标题】:PostbackUrl in relation to Master pages与母版页相关的 PostbackUrl
【发布时间】:2012-06-15 08:08:46
【问题描述】:

假设我们有两个页面:pageX.aspxpageY.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


【解决方案1】:

当按下后退按钮时,浏览器会从缓存中恢复页面以及最新的表单数据,例如文本框保留其输入的值。但是,Opera 尝试变得更智能一些,并且也恢复了 JavaScript 的最新状态。

设置 PostBackUrl 意味着,当单击按钮时,使用 JavaScript 更改表单操作并将表单发布到此新 URL。因此,当您在 Opera 中按下返回时,它会恢复页面以及对表单操作的 JavaScript 更改,这意味着所有后续提交都将转到这个新 URL。

我不喜欢使用 PostBackUrl,因为它只适用于启用 JavaScript。使用 Response.Redirect 服务器端和 Hyperlinks 客户端是更好的解决方案。

【讨论】:

    【解决方案2】:

    PostbackUrl vs NavigateUrl

    基本上,使用 NavigateURL,您正在执行 POST。 Response.Redirect 会做一个 GET。我不完全确定您为什么会看到这种特殊行为,但它很可能是您的浏览器。你使用的是什么浏览器?您还尝试过哪些其他浏览器?

    至于什么是最好的方法,我认为你最好忘记 ASP.NET 控件并这样做:

    <a href="pageY.aspx"><img src="foo.png" /></a>
    

    【讨论】:

      猜你喜欢
      • 2022-08-16
      • 2019-07-07
      • 2010-10-27
      • 2010-09-20
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      相关资源
      最近更新 更多