首页 文章

Asp.Net MVC 和 Session

提问于
浏览
20

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

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

当然,我可以将 4 个步骤放在一个页面中 show/hide,但这不是我对问题的看法。我想听听你对 MVC 中 Session 的看法,如果它对这种 multi-step 问题很好,或者你倾向于以其他方式做到这一点。

这非常类似于问题ASP.NET MVC 中的会话变量,除了我不是在寻找如何访问 Session,但如果这是解决这个问题的最佳方法,或者在 Asp.Net MVC 中有一些更好的东西。

提前致谢

3 回答

  • 19

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

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

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

    最后它是两种方式之间的判断,我多年来一直使用它们。

  • 2

    您可以在具有 TempData 的 Views 之间传递它...但是您必须保持将其传递给后续视图。它意味着被后续请求消耗,但这并不是说你无法将临时数据传递给下一个请求,而下一个请求也将相同的数据放回到临时数据中。

  • 1

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

相关问题