【问题标题】:How to persist data between views in MVC3 with JavaScript?如何使用 JavaScript 在 MVC3 中的视图之间保留数据?
【发布时间】:2013-02-28 01:28:58
【问题描述】:

我想在以下两种情况下直接将数据从一个视图传递到另一个视图:

  1. 允许我们的用户停靠和取消停靠在我们的应用程序中始终存在的工具栏。我希望在用户导航到另一个页面时保存此状态。工具栏使用 jQuery 停靠和取消停靠。

  2. 在某些情况下,在 AJAX 调用成功响应后,我们会进行整页刷新或重定向。我们希望在刷新/重定向后向用户显示通知(例如,您的操作成功)。

我最初的想法是使用 cookie,特别是使用 jquery-cookie,但后来我想知道使用 Session[] 变量。鉴于我们的 JavaScript 将位于外部文件中,我不知道这是否可行,如果可行,是否会使问题复杂化?

【问题讨论】:

  • 在返回您的 ajax 响应之前,是否有理由不在服务器端设置会话数据?
  • @Justin 我认为可能存在问题的唯一原因是我们的$(document).ready() 位于外部 JavaScript 文件中,这会在查询会话数据时导致问题。我想保持这个外部化而不是使用多个$(document).ready()s
  • 如果你使用Session,你不会关心你的$(document).ready()在哪里。 Session 存在于服务器上,因此您必须在服务器上对其进行读/写。例如,您在返回 ajax 响应之前设置了一些会话数据。然后,稍后......您需要获取一些数据,您必须返回服务器读取该数据(另一个 ajax 请求)。

标签: c# jquery asp.net-mvc cookies


【解决方案1】:

你看过草坪椅吗?

http://brian.io/lawnchair/

听起来很像您需要的。它用于跨页面持久化客户端数据。

【讨论】:

  • 这看起来很像 jQuery Cookie 插件?如果这是我决定解决此问题的方式,是否有任何理由使用 Lawnchair 而不是 jQuery Cookie?
【解决方案2】:

我的应用程序要求我跨视图和会话存储许多数据元素。我没有预先选择存储机制(主要是因为管理层无法决定),而是使用persistence.js 编写了我的应用程序。

我后来能够选择精确的存储机制,而对我的代码影响最小。

【讨论】:

    【解决方案3】:

    我遇到了同样类型的问题。 解决方法后,我使用 jQuery cookie 并存储隐藏的面板 ID。 并检查 jQuery 的 $(document).ready(function(){}); 中的 cookie,哪些面板是隐藏的,然后在制作它们的 display:none 之后。所以在回发之后,cookie 会持续存在并且面板变得隐藏。 它解决了我的问题。

    【讨论】:

      【解决方案4】:

      您可以通过简单地通过隐藏字段来回发送工具栏状态信息来做到这一点(意味着从 MVC 视图到控制器,而不是从控制器到 MVC 视图)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-04
        • 1970-01-01
        • 2011-11-01
        • 1970-01-01
        相关资源
        最近更新 更多