我正在使用Scott Gu的第5版预览博客中详细介绍的AcceptVerbs
方法来处理ASP.NET MVC中的表单条目:
- 用户通过GET获取空表单
- 用户将填好的表单通过POST提交到同一操作中
- 操作验证数据,执行适当的操作,然后重定向到新视图
因此,我不必使用TempData
。 话虽如此,现在我需要在这个过程中添加一个“确认”步骤,似乎需要使用TempData
。
由于某种原因,我有些抵制使用TempData
- 觉得可以设计得更好。
这是否是一个有效的顾虑,还是我在瞎担心?
我正在使用Scott Gu的第5版预览博客中详细介绍的AcceptVerbs
方法来处理ASP.NET MVC中的表单条目:
因此,我不必使用TempData
。 话虽如此,现在我需要在这个过程中添加一个“确认”步骤,似乎需要使用TempData
。
由于某种原因,我有些抵制使用TempData
- 觉得可以设计得更好。
这是否是一个有效的顾虑,还是我在瞎担心?
没有必要对TempData有所抵触...但是,如果使用不当,它确实可能是设计不良的标志。如果您正在使用RESTful URL,则TempData是将消息从POST操作传输到GET操作的最佳实践。考虑以下情况:
您在URL Products/New上有一个表单。该表单发布到Products/Create,该操作验证表单并创建产品。成功后,控制器重定向到URL Products/1;如果出现错误,则重定向回products/New以显示错误消息。
Products/1只是产品的标准GET操作,但我们希望显示一个消息,指示插入成功。这时TempData非常适合。在Post Controller中添加消息到TempData,然后在视图中添加一些if逻辑,就完成了。
失败时,我会在Post操作中向TempData添加表单集合中输入的值和错误消息的集合,并重定向到初始操作Prodcuts/New。我已经在视图中添加了逻辑,以填充表单输入与先前输入的值以及任何错误消息。我认为这很简洁明了!
Products/New
呢?Products/Create
有什么价值? - mpen我认为在使用TempData之前,你最好先犹豫一下。 TempData存储在会话中,如果:
如果您的网站需要具有高可用性,则还需要考虑会话状态的其他问题,但这些都是可以解决的问题。
我认为暂存数据有点像一种提示用户的即时性机制,这样可以很好地提醒他们最近所做的事情,但是我也不太愿意将其作为某些用户流程中必需的步骤。原因是如果用户刷新页面,我相信数据会丢失。另外,它的可靠性并没有被很好地定义,所以我也有些犹豫使用它。
我想知道问题是否出在您将操作重定向到其他页面之前进行确认步骤上。我想知道是否可以在首次提交后进行足够的处理来生成确认对话框,然后返回原始页面以显示确认问题。类似于如何进行验证,但验证规则检查确认步骤是否已执行(确认 UI 在其他验证通过之前隐藏)。
查看MVC3中的无会话控制器。结果表明,使用会话会阻止单个用户请求的并行执行,从而导致性能下降。
由于tempdata默认使用会话,因此您将无法使用此功能。您可以切换到使用cookie进行tempdata,但这有点尴尬(至少对我来说是这样)。尽管如此,比viewstate更清晰,所以也许这不是一个很大的障碍。
我有一个GetModel方法,首先检查TempData ["model"]是否存在,如果存在则返回该值。否则,GetModel从数据库中加载相应的数据。
当我需要返回需要相同模型数据的不同视图的操作时,它可以避免额外的数据库负载。
为什么你有这样的厌恶?这个东西只是在完成它的工作,并且做得很好 :)
如果你不喜欢它因为它不是强类型的,你可以随时创建一个包装器来提供强类型接口。
http://jameschambers.com/2014/06/day-14-bootstrap-alerts-and-mvc-framework-tempdata/
也许,如果仅用于重定向到另一页的警报,则可以改用查询字符串方法。