Asp.net mvc 3 MVC3多步骤表单-如何持久化模型对象

Asp.net mvc 3 MVC3多步骤表单-如何持久化模型对象,asp.net-mvc-3,razor,viewmodel,object-persistence,Asp.net Mvc 3,Razor,Viewmodel,Object Persistence,我有一个多步骤表单,它使用一个模型对象,我需要在步骤之间保持它。只有在最后一步之后,对象才会保存到数据库中。我见过有人建议使用HTML.Serialize,但是这个选项有多安全 此外,我的模型对象将随着用户填充表单而增长,这意味着带有序列化数据的隐藏表单字段将增加到我的HTML输出中 这种情况下的最佳做法是什么?我已经为此使用了 您可以将对象(模型数据的副本)存储在TempData中,并在下一个请求中使用它。如果在下一个请求中没有设置,它将被“销毁”。因此,您不必担心它会填满您的会话。将控制器视

我有一个多步骤表单,它使用一个模型对象,我需要在步骤之间保持它。只有在最后一步之后,对象才会保存到数据库中。我见过有人建议使用HTML.Serialize,但是这个选项有多安全

此外,我的模型对象将随着用户填充表单而增长,这意味着带有序列化数据的隐藏表单字段将增加到我的HTML输出中

这种情况下的最佳做法是什么?

我已经为此使用了


您可以将对象(模型数据的副本)存储在TempData中,并在下一个请求中使用它。如果在下一个请求中没有设置,它将被“销毁”。因此,您不必担心它会填满您的会话。

将控制器视为一个状态机,其中每个操作都是向导中的一个步骤。关于步骤之间的持久性并不是什么大问题,不管怎样,一个简单的POCO作为Dto,它将被发送到您的域接口进行验证和处理。您可以将其存储在IoC、会话、缓存、文件系统中。。。我希望你明白了。保持它的简单和干净。

您的向导中有动态功能吗?动态功能是指向导根据以前键入的数据显示/隐藏某些控件或从数据库加载特定数据,并且此逻辑无法移动到客户端。我确实具有动态功能,这就是我无法将其移动到客户端的原因。此外,用户可以同时处理此表单的多个实例,因此我必须小心隔离每个模型对象。我正在考虑结合使用TempData.Peek()和TempData.Keep()方法。但是,正如我在上面的评论中提到的,允许用户处理同一表单的多个实例。那么,我如何使用TempData()实现每个表单模型对象的隔离呢?用户总能找到一种方法让您的生活更加艰难。您可以在向导的第一页上生成一个唯一的编号。并将其用作TempData键的一部分。将这个数字放在html页面(隐藏字段)上以了解键。现在我使用TempData和唯一键引用ViewModel对象的多个实例。我还使用TempData.Peek()列出了用户正在处理的所有表单。如果我有更好的解决办法,我会告诉你的。谢谢你的帮助。