ASP.NET MVC – TempData – 好或坏的做法

我正在使用Scott Gu的Preview 5博客文章中详细介绍的AcceptVerbs方法来处理ASP.NET MVC中的表单条目:

  • 用户通过GET获得一个空的表单
  • 用户通过POST将填写的表单发布到相同的操作
  • Action会validation数据,采取适当的行动,并redirect到一个新的视图

所以我不必使用TempData 。 这就是说,我现在必须在这个过程中添加一个“确认”步骤,而且似乎需要使用TempData

出于某种原因,我厌恶使用TempData – 这是要devise的东西。

这是一个有效的关注,还是我补充?

我认为临时数据是一个通知用户的遗忘机制。 最好给他们提醒一下他们最近做的事情,但是我也会犹豫是否要在某个用户过程中把它做成一个必要的步骤。 原因是如果他们刷新页面,我相信它会消失。 那么我想我也犹豫是否使用它,因为它不是很好定义它是多么可靠。

我想知道问题是否在确认步骤之前将动作redirect到另一个页面。 我想知道是否他们第一次提交后,你可以做足够的处理来产生确认对话框,然后返回与确认问题的原始页面。 与validation方式类似,除了validation规则检查确认步骤是否已执行(确认UI隐藏,直到其他validation通过)。

不需要厌恶TempData …但是如果使用不当,肯定会成为糟糕的devise。 如果您使用RESTful URL,则TempData是将邮件从POST操作转移到GET操作的最佳实践。 考虑这个:

您在URL Products / New上有一个表单。 产品/创build表单,validation表单并创build产品,成功时,控制器redirect到URL产品/ 1,如果出现错误,则会redirect到产品/新build以显示错误消息。

产品/ 1只是该产品的标准GET操作,但我们希望显示一条消息,指示插入成功。 TempData是完美的。 将消息添加到Post Controller中的TempData中,并在视图中添加一些if逻辑并完成。

在失败时,我已经将在formCollection中input的值以及一系列错误消息添加到Post Action中的TempData中,并redirect到初始Action Prodcuts / New。 我已经添加了视图的逻辑来填充表单input与以前input的值以及任何错误消息。 看起来不错,干净的我!

我觉得在使用TempData之前,你最好不要犹豫。 TempData存储在会话中,如果出现以下情况,这可能对您有影响:

  1. 您现在不在网站上使用会话
  2. 你有一个系统需要扩展到高吞吐量,也就是说,你宁愿完全避免会话状态
  3. 你不想使用cookies(我不知道MVC如何支持无Cookie会话)

如果您的站点需要高可用性,那么在应用会话状态时还有其他注意事项,但这些都是可解决的问题。

我有一个GetModel方法首先检查TempData [“model”]并返回它。 否则,GetModel从数据库加载适当的数据。

当我有一个操作需要返回一个需要相同模型数据的不同视图时,它会从数据库中节省额外的负载。

在MVC3中检查会话控制器 。 事实certificate,使用会话会阻止并行执行单个用户的请求,从而导致性能下降。

由于tempdata默认使用会话,因此您将无法使用此function。 你可以切换到使用cookiestempdata,但有点尴尬(至less对我来说)。 尽pipe如此,它仍然比视图状态更清洁,所以也许这不是一个很大的破坏者。

你为什么有这样的厌恶? 这件事情是简单的工作,并把它做好:)

如果你不喜欢它,因为它是非强types的,你总是可以做一个包装,将提供你强types的接口。

这就像使用ViewData,这可能不是一个安全风险。 但我宁愿使用ViewData比TempData。 点击这里查看比较: http ://www.squaredroot.com/2007/12/20/mvc-viewdata-vs-tempdata/

根据devise的不同,您可以随时在数据库中的tempdata中存储用户/购物篮或任何您需要的内容,并且只需要一个“IsReady”字段来指示其是否已完成,如果您希望以后可以扩展记住,人们可以closures他们的浏览器。

所有的好的答案,你有看看这个消息传递。

由于大多数会话都存储在内存中,TempData和Session并不是RESTful体系结构的最佳主意。 所以,当你想使用服务器场时,用户会话将存在于一台服务器上,而下一个请求可能被发送到另一台服务器。

这就是说在这里使用TempData来传递消息。

http://jameschambers.com/2014/06/day-14-bootstrap-alerts-and-mvc-framework-tempdata/

如果仅用于redirect到另一个页面警报,则可以将Mabye调整为使用查询string方法。