MVC - 请求之间持久的viewmodel数据

时间:2011-12-28 00:58:38

标签: model-view-controller session viewmodel

我正在寻找一些建议,或者我可能已经忽略了一个解决方案,因为我正在研究一个项目。它涉及在多个请求之间持久化ViewModel数据。这是一个例子:

用户位于特定页面上,该页面包含一些表单字段和与基础模型相关的项目网格。用户需要向网格添加一个或多个项目,因此我必须将它们重定向到另一个页面以选择其中一些项目。用户在此页面上选择了他们的项目后,我需要将它们发送回原始页面,并在网格中显示这些项目。

我有这个工作,但我正在做的是在它们被重定向到第二页之前,我在会话中存储原始页面的ViewModel,使用第二页上的选定项目适当地更新ViewModel,然后重定向回原始页面并使用会话中的ViewModel填充表单字段和网格。

但是,我不认为这是最好的解决方案,可伸缩性将成为一个问题,因为这个项目需要可扩展,并且在会话中抛出东西不是理想的解决方案。我已经阅读了大量建议的类似问题,但我发现没有什么与我的具体情况有关。

有没有人做过这样的事情并且找到了更可靠的解决方案,或者可能对不同的实现有一些建议。感谢。

1 个答案:

答案 0 :(得分:1)

这归结为基本的Web请求限制,并且每个请求基本上都是“重新开始”。会话绝对是为了让你有一个地方来存储超出请求模型的东西,并且是你唯一的选择,除非你想要采用更高级的方法使用javascript。

Checkout this post因为我已经涵盖了编辑列表的主要解决方案,其中一些适用于此处。

在你的情况下,我肯定会建议使用模态/对话弹出窗口来选择你的“其他”项目,因为这将通过完全导航离开页面来消除你将遇到的大部分麻烦(如果该页面用于在其他地方,您可以轻松地重复使用部分视图,使其在对话框和不重复的页面中工作。 这将涉及一些小的javascript,但将更容易管理,因为表单实际上将保持在页面上,并且在大多数情况下我遇到的是更好的用户体验。

或者,您需要在其他页面上使用隐藏输入,并通过选择过程发布数据。看不出这种不会变丑的方法。

总之,如果您不想制作客户端解决方案,则使用会话是唯一的选择。我推荐客户端解决方案,因为jquery使这些场景的生活变得更加轻松,但它更复杂。

PS如果您确定对话不是最佳选择并坚持使用会话,请不要对其可扩展性感到恐慌,因为有些方法可以通过使用其他会话存储方法(如状态服务器甚至是专用服务器)使其更具可伸缩性SQL db for it。