20

我想在 asp.net mvc 应用程序的不同步骤中构造一个对象,每个步骤都是一个不同的页面。您将在快速 Web.Forms 应用程序中存储在 Session 中的那种东西。

读到它,在我看来,Session 并不是很像 asp.net MVC 的东西。但是我真的想不出这种情况的其他替代方案,因为 TempData 和 ViewData 似乎也不适合,所以也许我错了。

当然,我可以将 4 个步骤放在一页中并显示/隐藏,但这不是我的问题所在。我想听听你对 MVC 中的 Session 的看法,如果它是解决这种多步骤问题的好方法,或者你倾向于以其他方式来做。

这与 ASP.NET MVC 中的问题 Session variables 非常相似,只是我不是在寻找如何访问 Session,但如果这是解决此类问题的最佳方法,或者我在 Asp 中缺少更好的方法。网络 MVC。

提前致谢

4

3 回答 3

19

Session 没有任何非 MVC,它是 Web 的重要组成部分,大多数网站都以某种方式使用它。你真的有两个主要选择。要么将对象存储在页面之间的数据库中(这意味着保存不完整的对象),要么将其放入会话中。两者都有优点和缺点。

在会话中,您不必将部分对象保存到数据库中,但如果用户离开或会话超时,您将丢失所有信息。它还可能导致每个用户占用更大的内存,并且当您进行扩展时,它会导致一些其他问题。(所有这些都可以使用负载均衡器或中央会话存储上的粘性会话来解决)。

数据库方式在很多方面都更好,但通常您不想将不完整的对象保存到数据库中,一种折衷方案是创建另一个表并将序列化的对象保存到该表中。它不会通过您的真实表,因此您不必在数据库约束上妥协。(您也可以将会话数据存储在数据库中,这基本上是做同样的事情)

最后,这是两种方式之间的判断电话,多年来我都使用过。

于 2009-04-17T16:23:38.630 回答
2

您可以在带有 TempData 的视图之间传递它......但您必须保持通过后续视图传递它。它旨在供后续请求使用,但这并不是说您不能将临时数据传递给下一个请求,这也会将相同的数据放回临时数据中。

于 2009-04-17T16:30:31.127 回答
1

你试过<%= Html.HiddenField(...) %>吗?

于 2009-04-17T15:28:34.877 回答