【问题标题】:MVC - Persisting viewmodel data between requestsMVC - 在请求之间持久化视图模型数据
【发布时间】:2011-12-28 00:58:37
【问题描述】:

我正在寻找一些建议或可能是我忽略的解决方案,以解决我正在处理的项目中遇到的问题。它涉及在多个请求之间持久化 ViewModel 数据。这是一个例子:

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

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

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

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

【问题讨论】:

    标签: model-view-controller session viewmodel


    【解决方案1】:

    这归结为一个基本的网络请求限制,每个请求本质上都是“重新开始”。 Session 绝对是为了让您可以在请求模型之外存储东西的地方,并且是您唯一的选择,除非您想使用 javascript 采用更高级的方法。

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

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

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

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

    PS 如果您确实认为对话不是最佳选择并坚持使用会话,请不要担心它的可扩展性,因为您可以通过使用其他会话存储方法(例如状态服务器甚至专用它的 SQL 数据库。

    【讨论】:

    • 谢谢,盖茨。将此标记为答案,因为您为我提供了很多有用的信息,这让我很头疼。我喜欢客户端/部分视图的建议,我认为这可能是我的方式,因为在昨天与我的老板讨论之后,还有其他原因我们可能希望从我们在此的一些表格中创建部分视图项目。但我需要做更多的思考和计划。但是感谢您提供的信息,非常感谢。
    • 感谢詹姆斯,很高兴为您提供帮助。还认为你采取了正确的方法,退后一步,制定一些计划。一年多前,我发现自己正是你的情况,几次尝试走捷径只是浪费了我的时间。正确的解决方案(以及与此相关的列表问题)非常具体地针对具体情况,并且在我的网站的正确上下文中解决它需要一些工作,但通过可靠的可重复使用使我收回了 10 倍的时间方法。祝你好运!
    猜你喜欢
    • 2011-01-29
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多