Asp.net mvc 4 MVC PRG模式-传递模型

Asp.net mvc 4 MVC PRG模式-传递模型,asp.net-mvc-4,session,persistence,tempdata,Asp.net Mvc 4,Session,Persistence,Tempdata,我在MVC项目中使用PRG模式(Post Redirect Get)。其思想是,您不会从操作中返回视图,而是在一篇成功的文章中,您完全重定向到另一个视图,该视图执行Get(可能在数据库中)以获取保存的值并重新显示它们(想象一下“保存成功”页面) 在我的情况下,我没有数据库来保存保存的详细信息,我想知道一种可靠的方法来存储并在下一页获取保存的详细信息 我在做什么 RedirectToAction("Success", myViewModel) 我理解这是错误的,不仅仅是因为它在URL栏中有所有的

我在MVC项目中使用PRG模式(Post Redirect Get)。其思想是,您不会从操作中返回视图,而是在一篇成功的文章中,您完全重定向到另一个视图,该视图执行Get(可能在数据库中)以获取保存的值并重新显示它们(想象一下“保存成功”页面)

在我的情况下,我没有数据库来保存保存的详细信息,我想知道一种可靠的方法来存储并在下一页获取保存的详细信息

我在做什么

RedirectToAction("Success", myViewModel)
我理解这是错误的,不仅仅是因为它在URL栏中有所有的值。我需要做的是

RedirectToAction("Success")
然后以某种方式获取这些值,构建一个viewmodel并将其提供给视图

我知道有ViewBag、TempData、ViewData和Session,但没有在各种场景中进行大量测试,我不知道在我的情况下使用哪一个。对于面向公众的网站来说,静态显然是不好的

如果您在没有数据库的情况下进行PRG,那么保存数据的方法是什么?或者我可以简单地抛出一些错误&重定向,如果用户确实返回&转发

非常感谢

编辑:示例场景-汽车保险。用户访问站点,填写个人详细信息并点击提交。在下一页,将显示选项(第三方、盗窃、自愿超额等),选择这些选项后,将通过AJAX调用以获取报价

所有的个人信息都会随选项一起发送。但是没有用户帐户,数据库中也没有任何内容(数据保护法-除非获得许可,否则我们不会存储数据,如果用户只是浏览,询问会让他们感到厌烦)

更新:我们确定的解决方案如下: 详细信息发布操作生成选项视图模型。它被放入TempData中。 调用RedirectToAction(“选项”)。 在“选项”操作中,我们将获得viewmodel

OptionsViewModel viewModel = (OptionsViewModel)TempData.Peek("MyViewModel"); // .Peek preserves the value

如果viewmodel为null,我们将重定向到Action(),返回详细信息。否则,我们将返回选项视图。

除了它创建的丑陋查询字符串之外,
重定向到操作(“成功”,myViewModel)
可能会失败,因为(1)您可能超过查询字符串限制(这将引发异常)或者(2)如果您的模型包含复杂对象或集合的属性,在GET方法中,这些属性将为
null

ViewBag
ViewData
不适合在方法之间传递值-它们用于将数据从控制器传递到视图(请参阅)

不清楚为什么您没有某种类型的永久存储,但是如果没有它,您将需要
TempData
Session
在请求之间临时存储数据

TempData
使用
会话
,但它只持续一个请求,因此如果您使用它将模型传递给
Success()
方法,并且用户刷新浏览器,则模型将
为空
,尽管您可以使用
.Peek
。保留
以覆盖该行为(请参阅)


个人,我从不使用<代码>会话< /> >(只使用<代码> TunDATAs/COD>)传递非关键数据(如指示成功的一次性消息),并考虑将数据保存在某个地方,例如,在重定向之前将xml文件复制到一个xml文件,以便可以在GET方法中再次读取该文件。

您的答案为我指明了正确的方向,因此我很乐意接受这个答案。我已经在上面添加了我的解决方案。