后退按钮历史记录:POST后跳过页面

时间:2011-12-20 00:48:44

标签: asp.net back-button

Move backward through history skipping the same page with different query string

上面的类似我的问题,但我会更具体,因为我担心POSTs:

方案: 用户在产品列表页面上。 (的 Shorts.aspx ) 用户选择产品并导航至产品详细信息页面( Best-Cargo-Shorts.aspx ) 用户点击添加到购物车,它将表格的回发(POST)执行到同一页面。 ( Best-Cargo-Shorts.aspx ) - 现在再次显示详细信息页面,但顶部添加了购物车消息。

当前行为: 添加到购物车表格后的帖子;当用户点击“返回”按钮时,他们会导航回同一页面的“帖子前”版本。

欲望: 当用户点击“返回”按钮时,我希望它转到 Shorts.aspx ,而不是 Best-Cargo-Shorts.aspx ,有效地跳过“POST前” “页面,或更准确地说,不存储第二个发布的页面(Best-Cargo-Shorts.aspx)。

此外,我总是希望避免“页面内容过期”消息。我只是不想在历史上发布该页面的版本。通过这种方式,以下也可能是真的。

Shorts.aspx > Best-Cargo-Shorts.aspx > Best-Cargo-Shorts.aspx [POST]>的 Cart.aspx

如果按下购物车和按钮,我希望浏览器导航到 Best-Cargo-Shorts.aspx (不使用POST)。

C#可以实现吗?此外,是否有非JavaScript解决方案?

感谢。

2 个答案:

答案 0 :(得分:0)

处理此问题的一种常见方法是Post-Redirect-Get pattern

本质上,POST请求的目标始终以303 See Other(如果是HTTP 1.1)或302 Moved Temporarily(如果HTTP 1.0)状态代码将请求重定向为GET,并且通常从历史记录中删除过期的POST页面。潜在的缺点包括可能作为查询字符串附加到GET的表单参数,我不知道它将(或不会)与ASP.Net Forms,MVC或其他Web框架集成的程度如何。

答案 1 :(得分:0)

通常,您应该使用post-redirect-get模式,即在用户使用POST将项目添加到卡片后,将其重定向到带有302的Best-Cargo-Shorts.aspx。 现在问题,我将使用Ajax作为帖子。我不能想到使用服务器端代码实现所需行为的跨浏览器方式。