2009-04-17 72 views
21

我想在asp.net mvc应用程序的不同步骤中构建一个对象,每一步都是不同的页面。您在Session中存储的快速Web.Forms应用程序。Asp.Net MVC和Session

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

当然,我可以把4个步骤放在一个页面中显示/隐藏,但这不是我的观点。我希望在MVC中听到你对Session的看法,如果这是多步骤问题的一个很好的方法,或者你倾向于以其他方式来做。

这是非常像问题Session variables in ASP.NET MVC,除了我不在寻找如何访问会话,但如果这是解决这样的问题或有更好的东西的最好方法我错过了在Asp.Net MVC 。

在此先感谢

回答

20

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

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

数据库方式在许多方面都比较好,但通常不希望将不完整的对象保存到数据库中,一种妥协方法是创建另一个表并将序列化到该表的对象保存。它没有通过你的真正表格,所以你不必妥协你的数据库约束。 (你也可以将会话数据存储在数据库中,这基本上是做同样的事情)

最后,它是两种方式之间的判断呼叫,我多年来都在使用。

1

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

+0

你的意思是“”的html助手吗?由于我只能存储简单的值,我需要存储和填充一个复杂的对象 – antonioh 2009-04-17 15:35:31

+0

http://stackoverflow.com/questions/669492/asp-net-mvc-is-there-a-way-to-simulate-a -viewstate/669495#669495 – 2009-04-17 16:04:33

2

您可以在具有TempData的视图之间传递它......但您必须保持将它传递给后续视图。它意味着被后续请求占用,但这并不是说你不能将临时数据传递给下一个请求,该请求也会将相同的数据存回临时数据。