【问题标题】:where should I save a complex MVC application UI state?我应该在哪里保存复杂的 MVC 应用程序 UI 状态?
【发布时间】:2009-01-14 17:28:20
【问题描述】:

我一直在研究几个 MVC 框架(如 rails、merb、cakephp、codeignitier 和类似的...)

我看到的所有示例基本上都是简单明了的 CRUD 页面,包含查询字符串和发布的字段值中所需的所有 infr。

我有几个应用程序是用某种用经典 asp 构建的框架制作的。

这个框架处理一些 CRUD 的东西,比我找到的例子要复杂一些。

类似于 master-detail、按示例过滤、分页、排序和类似的东西。

我有一个控制器类,它只是一个有限状态机,通过不同的状态(如新建、浏览、过滤、显示等),然后根据引发的事件执行适当的操作,最后检索需要调用页面的信息。

为了实现这一点,我有几个隐藏的输入来保持网页的状态(比如当前 id、过滤条件、订单条件、以前的状态、以前的事件,嗯,你明白了)

您认为实现这种功能的最佳方法是什么?

隐藏在视图中并从控制器中使用的输入??? (我想这相当于我现在在 classi asp 中所做的)

--

(为响应 tvanfosson 而添加)

基本上,我的问题是指第三类,与上下文相关的设置(关于我同意你的其他两个类别)我存储在隐藏字段中以将它们存储在查询字符串中的信息,我猜当您单击“下一页”,您将需要保存在查询字符串中的所有内容都包含在内,对吗?这样查询字符串就会附加到执行某种操作的每个链接中...

我不确定,使用查询字符串而不是隐藏输入有什么优点和缺点???

【问题讨论】:

  • 你保持什么状态不能作为路径部分转移到 URL?

标签: model-view-controller design-patterns user-interface frameworks


【解决方案1】:

我根据实际数据的特点使用不同的策略。作为首选项的东西,例如默认页面大小,我保存在与当前登录用户关联的首选项对象(表)中,并在需要时从那里检索。

与当前登录相关的持久设置(例如页面的过滤器设置)存储在用户的会话中。一般来说,如果用户在当前会话中设置它们,它们应该保持粘性。我认为过滤器设置和可见性是这样的。如果我过滤一个列表,离开它以深入了解特定项目,然后返回列表,我希望重新应用我的过滤器设置 - 所以我将其作为会话的一部分。

上下文相关的设置——比如当前的排序列或页码,是使用查询参数控制的。分页和排序控件(链接)使用适当的查询参数构建,以便在单击时“做正确的事”,并传递任何必要的查询参数来维护或更新控件的当前上下文。使用查询参数允许您使用 HTTP GET,它是可收藏的,而不是 POST。使用隐藏的表单参数使用户更难保存或输入将他们直接带到他们想去的地方的 URL。这对排序可能比对分页更有用,但原则同样适用。

【讨论】:

    猜你喜欢
    • 2011-09-16
    • 2015-10-22
    • 2011-07-31
    • 2015-05-10
    • 2018-08-06
    • 1970-01-01
    • 2013-01-22
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多