POST后维护视图状态

时间:2010-09-01 16:18:58

标签: javascript jquery ajax jquery-ui post

我正在创建一个使用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函数执行所有选择并将选项卡的状态设置回原来的状态。

2 个答案:

答案 0 :(得分:1)

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

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

<强>更新

确实你正在做一个AJAX帖子,但你也显然是将该帖子的HTML响应插入到你的UI中。这是一种有点不同寻常的模式(除了ASP.NET更新面板)。通常,您要么POST数据并且期望响应中没有内容,要么从您应用于UI的帖子返回数据,而不是接收UI的片段。

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

答案 1 :(得分:0)

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

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