Asp.net mvc 4 MVC PRG模式-传递模型
我在MVC项目中使用PRG模式(Post Redirect Get)。其思想是,您不会从操作中返回视图,而是在一篇成功的文章中,您完全重定向到另一个视图,该视图执行Get(可能在数据库中)以获取保存的值并重新显示它们(想象一下“保存成功”页面) 在我的情况下,我没有数据库来保存保存的详细信息,我想知道一种可靠的方法来存储并在下一页获取保存的详细信息 我在做什么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栏中有所有的
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方法中再次读取该文件。
您的答案为我指明了正确的方向,因此我很乐意接受这个答案。我已经在上面添加了我的解决方案。