C# MVC:Html.serializevs Session

C# MVC:Html.serializevs Session,c#,asp.net-mvc-5,C#,Asp.net Mvc 5,我目前正在实现一个向导来下订单,它由几个步骤组成,但每个产品的步骤不同 我必须在两个步骤之间保存状态,以便用户可以来回跳转并进行调整 要做到这一点,在浏览之后,似乎有两种方法: 为每个步骤创建一个包含子模型的主视图模型,然后创建Html。在页面中序列化模型 只需将整个对象存储在会话中 我想知道为什么我会选择这两种方法。第一个是在2009年MVC2中引入的,这与所有关于Html.Serialize的帖子一样古老,所以我想知道这是否仍然是一种被接受的方式。特别是考虑到它与ViewState有很多

我目前正在实现一个向导来下订单,它由几个步骤组成,但每个产品的步骤不同

我必须在两个步骤之间保存状态,以便用户可以来回跳转并进行调整

要做到这一点,在浏览之后,似乎有两种方法:

  • 为每个步骤创建一个包含子模型的主视图模型,然后创建Html。在页面中序列化模型
  • 只需将整个对象存储在会话中
我想知道为什么我会选择这两种方法。第一个是在2009年MVC2中引入的,这与所有关于Html.Serialize的帖子一样古老,所以我想知道这是否仍然是一种被接受的方式。特别是考虑到它与ViewState有很多不同,而ViewState在ASP.NET中很不安全

在那之后,会话似乎是最合乎逻辑的选择,但我想知道它的缺点是什么。如果应用程序池决定回收,我的会话是否会丢失?会话是服务器端的吗

谢谢


小旁注:现在我对使用Javascript不感兴趣,我想保留这个服务器端。因此,我没有将其列为第三个选项。

会话的生存期有限,如果用户在向导上打开了多个选项卡,会话将无法正常工作

将数据保存在隐藏字段中更干净,因为它实际上是无状态的,除非数据太大或出于安全原因必须将其保存在服务器端


我建议您尝试使用隐藏字段,只有在出现问题时才切换到会话。

如果您使用InProc会话(默认),那么是的,当应用程序池回收时,会话将丢失。ASP.NET MVC完全是关于拥抱web的无状态性质,那么为什么要使用会话?将数据保存在输入/隐藏变量中。