后退按钮单击和上一页仍显示错误消息

时间:2013-04-29 07:59:32

标签: asp.net-mvc-3

我使用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标头,因此无法区分页面的加载位置。

我很想知道以前是否已经解决了这个问题。我的谷歌搜索空了。

由于

1 个答案:

答案 0 :(得分:1)

行。我现在很满意。如果:

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

都表现出同样的行为,然后我的工作并没有达到最佳实践。

拦截浏览器的导航按钮对我来说似乎非常黑客。这是一个用例,我们必须确保我们的代码在用户愚蠢的东西时没有损坏。但优雅地解决?当浏览器取出控制权时,可能不是一个大司机。