2010-09-01 118 views
2

之后我创建利用jQuery UI tabs网站。只要用户在标签之间翻转,他们刚刚离开的标签就会被发回服务器以保存状态。维护视图状态POST

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

编辑:我想添加一些代码展示我在用户切换标签时所做的文章。 (特别是基于响应。)

$.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功能做了所有的选择和选项卡的状态设置回到它以前是。

回答

1

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

当用户确实是你需要查找上次已知位置的UI页面的初始让它只能将。如果该用户存储了某些内容,则可以添加逻辑以在页面加载时设置用户界面的初始状态。

更新:

事实上你正在做一个AJAX的职位,但你显然也将来自后HTML响应到您的UI。这是一个有点不寻常的模式(除了ASP.NET更新面板)。通常,你要么POST数据和预期的响应没有内容或你会收到数据从中你会应用到用户界面,而不是接受UI的片段后回来。

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

+0

@Jacob - 我以为我已经在做一个AJAX风格的贴子。我用用户切换标签页时执行POST的代码更新了我的问题。也许这将有助于澄清事情。谢谢。 – JasCav 2010-09-01 18:13:18

+0

@Jacob - 我包含HTML响应的原因是因为我们有服务器端验证规则,需要将其放回表单中,以便用户可以看到它们(通过数据注释)。我不知道如果我在发布各个选项卡时没有这样做会发生什么。 – JasCav 2010-09-01 20:01:51

+0

然后,使用'.live(...)'应该可以达到你的目的。 – Jacob 2010-09-01 20:13:56

0

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

我也可能完全错误 - 我正在制作一些猜测,因为我看不到任何代码。