【发布时间】:2015-03-10 16:37:48
【问题描述】:
我有主页,由一些复选框组成。用户必须标记其中一些,然后提交。从那里,我向 DB 发出一些请求,然后提取一些数据,然后将其显示给用户。
我想使用 PRG 模式,所以提交后如果刷新页面,就不会问你'are you sure blabla...'。
在我的 ASP.NET MVC 代码中,我有 2 种方法:
public ActionResult RedirectToPreview(DemandLetterModel model)
和 public ActionResult PreviewLetters(DemandLetterModel 模型)
RedirectToPreview 向 DB 发出请求并取回数据,然后将它们放在 tempdata 上,如下所示:
TempData["Notices"] = EligibleNotices.GetListOfNotices(notices);
TempData["Letters"] = letters;
在 PreviewLetters 中,我有:
ViewBag.Notices = TempData["Notices"];
ViewBag.Letters = TempData["Letters"];
return View("Preview");
它可以工作,但是当您刷新页面时,由于临时数据,它不再工作。我该怎么做?我更喜欢没有会话,因为它增加了复杂性。
我可以只为刷新缓存这些数据吗?有没有办法解决这个问题?
【问题讨论】:
-
仅供参考 - TempData 由 Session 支持
-
看起来你不是在重定向...
-
不确定您为什么不想使用 Session。它与 TempData 相同。还知道 TempData 仅“幸存” 1个重定向。 ViewBag 只存在一个视图。不是 100% 肯定,但也许你的问题是 TempData 在“刷新”后不再有效(看起来像重定向)。我可以建议以下两者之一: 1. 存储在会话中。 (仅当会话为空时才调用数据库) 2. 使用缓存。
标签: c# asp.net-mvc redirect post get