返回按钮上一页上的单击和错误消息仍然显示

问题描述:

我有一个非常简单的使用ASP.NET MVC 3的1页表单。返回按钮上一页上的单击和错误消息仍然显示

它有3个输入。如果用户输入正确的输入,并且数据库检索到pdf,则该pdf将显示在下一页中。在这种情况下,我已经使用了PRG模式:

public ActionResult Index() 
{ 
    SomeModel model = new SomeModel 
    { 
    ... properties 
    }; 

    return View(model); 
} 

[HttpPost] 
public ActionResult Index(SomeModel model) 
{ 
    byte[] blob = someService.GoGetDetails(model); 
    TempData.Add("blobkey", blob); 

    return RedirectToAction("DisplayPdf"); 
} 

public ActionResult DisplayPdf() 
{ 
    return File(TempData["blobkey"] as byte[], "application/pdf"); 
} 

问题用例如下。 用户输入不正确的详细信息并点击提交按钮。显示红色错误文本。 用户然后输入正确的详细信息并点击提交按钮。 Pdf显示。 用户然后点击返回按钮。窗体显示前一个红色错误文本可见。

测试人员已经提出了一个要求,即点击后退按钮时红色文本不应该存在。

看起来很简单。直到你尝试。有没有人有这个神奇的子弹。

我试图妥协的一件事情没有奏效。也就是说,我想杀了浏览器的缓存与DisplayPdf acttion方法在这里面代码:

 this.ControllerContext.HttpContext.Response.Expires = 60; 
     this.ControllerContext.HttpContext.Response.ExpiresAbsolute = DateTime.Now.AddSeconds(-1); 
     this.ControllerContext.HttpContext.Response.AddHeader("pragma", "no-cache"); 
     this.ControllerContext.HttpContext.Response.CacheControl = "no-cache"; 

它没有任何效果。也许这在webforms世界中起作用。与FileResult不在一起。

当后退按钮被击中时,没有请求到服务器。这都是客户端。所以,我确实可以访问javascript。但JavaScript无法访问http标题,因此无法区分页面加载的位置。

我很想看看这个问题是否已经解决过。我的谷歌搜索空了。

谢谢

好的。我现在满意了。如果:

  • Amazon.com
  • JsFiddle.net
  • Outlook.com
  • Dropbox.com

都表现出相同的水煤浆,然后我的工作还没有落下短的最好实践。

拦截浏览器的导航按钮对我来说似乎很不好听。这是一个用例,我们必须确保我们的代码在用户做出愚蠢的事情时不会受到损害。但优雅地解决?当浏览器取出控制权时,可能不是一个很大的驱动程序。