【问题标题】:Maintain View State After POSTPOST 后保持视图状态
【发布时间】:2011-04-06 21:56:50
【问题描述】:

我正在创建一个使用jQuery UI tabs 的网站。每当用户在选项卡之间切换时,他们刚刚离开的选项卡就会被发送回服务器以保存状态。

特别是其中一个选项卡有点复杂,如果我选择特定的数据选项,则需要禁用其他选项。但是,由于 POST,当我返回选项卡时,这些选项会在视图中重新启用。我发现解决此问题的当前解决方案是检查是否选择了特定选项并适当地禁用其他选项(当用户返回选项卡时会发生这种情况)。但是,这似乎工作量太大。我想知道即使通过 POST,是否有任何方法可以让 disabled 属性保留在各种选项上。 (如果答案是“否”,我会接受,但我想看看是否有另一种替代方法来确保用户的视图是正确的。)

编辑:我想添加一些代码来演示我在用户切换标签时所做的帖子。 (特别是根据回复。)

$.post($(form).attr("action"), $(form).serialize(), function (data, success) {
    if (success) {
        // Inject the resulting form back into the parent of the page.
        var parent = $(form).parent();
        parent.removeData($(form));
        parent.html(data);

        processTabAfterLoad(tab_index);
    }
});

processTabAfterLoad 函数执行所有选择并将选项卡的状态设置回原来的状态。

【问题讨论】:

    标签: javascript jquery ajax jquery-ui post


    【解决方案1】:

    如果我是你,我会采取不同的方法。您在导航时发回服务器的目标似乎是在应用程序中保留用户的位置,以便当他们返回时,您可以恢复此状态。而不是通过 POST 重新加载整个页面,您可以做的是做一个“AJAX”帖子来告诉服务器存储用户的 UI 位置,但在客户端执行所有 UI 启用逻辑。这样,不仅 UI 转换看起来更流畅,而且您将减少服务器负载并使应用程序更具响应性。

    只有当用户执行页面的初始 GET 时,您才需要查找最后已知的 UI 位置。如果为该用户存储了某些内容,您将添加逻辑以在页面加载时设置 UI 的初始状态。

    更新:

    确实,您正在发布 AJAX 帖子,但显然您还将该帖子的 HTML 响应插入到您的 UI 中。这是一种不寻常的模式(ASP.NET 更新面板除外)。通常,您要么发布数据并期望响应中没有内容,要么您会从您应用到 UI 的帖子中收到 data,而不是接收 UI 的片段。

    如果您致力于当前处理表单提交的方式,您可以查看 jQuery live 函数,该函数可以将更改应用于元素以及符合条件的新插入元素。

    【讨论】:

    • @Jacob - 我以为我已经在做一个 AJAX 风格的帖子了。我用当用户退出选项卡时执行 POST 的代码更新了我的问题。也许这将有助于澄清事情。谢谢。
    • @Jacob - 我包含 HTML 响应的原因是因为我们需要将服务器端验证规则放回表单中,以便用户可以看到它们(通过数据注释)。如果我在发布单个标签时不这样做,我不确定会发生什么。
    • @Jacob - 我感觉有点愚蠢......没有真正看到 live() 将如何帮助我。我以前曾将它用于其他目的(例如,在这里,由于选项卡是异步加载的),但我没有看到它如何解决我在视图中保持正确状态(或不丢失它)的问题首先是当我切换标签时)。对不起这个问题......但我有点迷路了。
    • 我不确定您当前是如何执行 UI 禁用逻辑的,但如果新 HTML 具有与被替换的 HTML 相同的 ID/CSS 类,那么如果您已完成禁用live 的逻辑,传入的元素应该应用相同的修改。
    • @Jacob - 谢谢。就是这样。我认为我感到困惑的是,似乎没有一个带有“live”的事件可以处理在元素加载时设置状态(至少我没有看到)这将允许我应用修改。我是否错过了有关各种事件的某些内容? (我的一部分开始认为我应该在服务器端完成所有这些工作,但我不确定这是否真的能解决问题......)
    【解决方案2】:

    标签通常是导航技术。恕我直言,当 GET(即普通链接)可以执行回发和重定向时,这是一种不好的做法。 GET 将视图状态重置回已知点,是一个小负载,不需要在重定向之前无论如何都会被丢弃的页面生命周期等。

    我在这里也可能完全错了——我在做一些猜测,因为我看不到任何代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      相关资源
      最近更新 更多