ASP.NET - 跨多个页面维护未保存的模型状态

时间:2013-08-02 20:29:25

标签: asp.net-mvc entity-framework

我正在尝试创建一组视图来收集大量信息。我之所以说是因为我已经在几个页面中分解了这些信息,这些页面按问题类型进行组织。我希望用户能够按照自己的意愿离开,添加,删除,更新数据,但我还需要他们能够取消他们的更改。看起来很简单。

但是从代码的角度来概念化这个问题,我遇到了问题。

起初我想在多个页面中保留模型。所以我会有一个控制器,根据他们的步骤重定向到不同的视图,并传递模型,直到他们保存。但是,除非我在隐藏字段中存储他们当前没有处理的所有信息,否则我从视图返回以进入下一步的模型是半空的。

然后我考虑使用会话变量。然后我想,如果我按下后退按钮或离开“工作流程”而没有单击取消来清除会话变量,那么我冒着用户重新打开同一个对象的风险,他们的更改仍然存在。

我真的没有看到这样做的优雅方式。我认为这是我缺乏ASP.NET \ MVC的经验。

1 个答案:

答案 0 :(得分:0)

我们正在做类似的工作,其中有一个向导类型的接口,每个步骤都是它自己的视图。目前,我们已启用会话以在步骤之间保存顶级模型,但这对我们来说是暂时的。为了避免会话开销(请求生命周期和状态服务器的网络流量),我们很快就会切换到将顶级模型作为JSON持久保存到数据库表(以及用户的密钥),在将来,我们可以为模型中的数据构建强类型存储表,以便更轻松地查询/报告正在进行的用户。这也允许我们控制数据的生命周期,用户可以在下次登录时继续他们离开的地方。 MVC纯粹主义者似乎说不使用ASP.net会话状态,但我不确定为什么。这可能是因为通过使用会话,你不再是REST-ful,而是MVC!= REST(虽然它可以)。我会说,如果你的时间很短,启用会话状态只是抛出数据就可以让你更快地完成它。你可以随时改变它,就像我的团队计划一样。这里的真正答案还取决于您的业务需求。无论如何,希望这增加了一些有用的问题。