首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC PRG模式-传递模型

MVC PRG模式-传递模型
EN

Stack Overflow用户
提问于 2015-08-07 16:21:50
回答 1查看 886关注 0票数 1

我在MVC项目中使用了PRG模式()。这样做的想法是,您不从操作中返回视图,而是在一个成功的帖子中,您将完全重定向到另一个视图,该视图可以获取保存的值并重新显示它们(例如“保存成功”页面)。

在我的例子中,我没有一个数据库来保存保存的详细信息,我想知道一种可靠的存储方式,然后在下一页获取保存的详细信息。

我在做

代码语言:javascript
复制
RedirectToAction("Success", myViewModel)

我理解这是错误的,尤其是因为它在地址栏中有所有的值。我需要做的是

代码语言:javascript
复制
RedirectToAction("Success")

然后以某种方式将值取回来,构建一个视图模型并将其提供给视图。

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

如果您在没有数据库的情况下执行PRG,那么如何持久化这些数据?或者,如果用户返回和转发,我可以抛出某种错误&重定向吗?

在此之前,非常感谢您。

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

所有的个人信息都会随选项一起发送。但没有用户帐户,也没有任何东西被写入数据库(数据保护法-我们不存储数据,除非获得许可,并询问将推迟人们,如果他们只是浏览)。

更新:我们确定的解决方案如下: Details POST操作构建了一个OptionsViewModel。它被放入TempData中。RedirectToAction("Options")被调用。在选项操作中,我们得到了视图模型。

代码语言:javascript
复制
OptionsViewModel viewModel = (OptionsViewModel)TempData.Peek("MyViewModel"); // .Peek preserves the value

如果视图模型为null,我们将RedirectToAction()返回到Details。否则,我们返回Options视图。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-08 01:58:01

除了它创建的丑陋查询字符串之外,RedirectToAction("Success", myViewModel)可能失败,因为(1)您可能超过查询字符串限制(这将引发异常)或(2)如果您的模型包含复杂对象或集合的属性,那么这些属性将是GET方法中的null

ViewBagViewData不适合在方法之间传递值-它们用于将数据从控制器传递到视图(参见这篇文章)。

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

TempData使用Session,但它只持续一个请求,因此如果您使用它将模型传递给Success()方法,并且用户刷新浏览器,则模型将是null,尽管您可以使用.Peek.Keep覆盖该行为(参见这个问题/答案)。

就我个人而言,我从不使用Session (而且只使用TempData传递非关键数据,例如一次表示成功的消息),并且会考虑将数据保存在某个地方,例如,在重定向之前将数据保存到xml文件中,以便在GET方法中再次读取。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31882432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档