首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ajax CollapsiblePanelExtender在回发时保持状态

Ajax CollapsiblePanelExtender在回发时保持状态
EN

Stack Overflow用户
提问于 2013-10-17 19:49:15
回答 3查看 3.7K关注 0票数 6

我有一个网格视图。在里面,我有一个包含按钮的CollapsiblePanelExtender。当我按下一个按钮时,这会导致post返回,并且CollapsiblePanelExtender关闭。我正在尝试编写一个解决方案,使CollapsiblePanelExtender在回帖后保持打开状态。这就是我到目前为止所尝试的:

代码语言:javascript
复制
function pageLoad(sender, args) {
   var objExtender;                
   var retval="";               

   if (document.getElementById(GridView1)) {
      retval = document.getElementById(GridView1);
   }
   var CollapsiblePanelExtender1 = retval.getElementsByTagName("CollapsiblePanelExtender1");

   if(CollapsiblePanelExtender1.get_Collapsed()) {
      CollapsiblePanelExtender1.set_Collapsed(true);
   }
   else {
      CollapsiblePanelExtender1.set_Collapsed(false);
   }
}
EN

回答 3

Stack Overflow用户

发布于 2013-10-21 22:17:23

基本上,CollapsiblePanelExtender在回发期间保持其状态。但在回发期间,我假设您执行的是数据绑定(我猜您已经执行了)。在数据绑定期间,所有的控件都会被重新创建,这就是为什么它们的内部状态是松散的。

为了解决您的问题,我建议您在执行数据绑定之前保存CollapsiblePanelExtender的状态,然后恢复此状态。这可以在服务器端完成。如果您启用了动画,这也有助于避免UI的闪烁。

因此,要获得CollapsiblePanelExtender的状态,您可以简单地记住它的客户端状态值。然后,您将能够恢复此值。例如,这是可用于在服务器端展开/折叠CollapsiblePanelExtender的代码:

代码语言:javascript
复制
// To collapse panel.
this.CollapsiblePanelExtender1.ClientState = "true";

// To Expand panel.
this.CollapsiblePanelExtender1.ClientState = "false";

如果你仍然想在客户端折叠/展开CollapsiblePanelExtender,那么你需要类似下面这样的代码:

代码语言:javascript
复制
Sys.Application.add_load(function() {
    var extender = $find('<%= this.CollapsiblePanelExtender1.ClientID  %>');

    extender.expandPanel();

    extender.collapsePanel();
});

编辑此选项没有任何帮助,因为您试图在单击处理程序中恢复状态。当您调用网格视图控件的databind时,不会立即重新创建行。因此,如果你想设置(恢复)可折叠扩展器控件的状态,最好在网格的RowCreated事件处理程序中完成。

例如,您可以使用类似以下内容的代码:

代码语言:javascript
复制
    protected void GridView_OnRowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow && SomeValueToIdentifyThatThisPanelShouldBeExpanded)
        {
            CollapsiblePanelExtender extender =
                e.Row.FindControl("CollapsiblePanelExtender1") as CollapsiblePanelExtender;
            extender.ClientState = "false";
        }
    }
票数 1
EN

Stack Overflow用户

发布于 2013-10-26 00:31:46

我实际上在我的博客上使用了这些,因为asp.net允许我使用带有中继器控件的可折叠面板拖放。

当你打开面板时,技巧就是在内容中加入ajax。你可以很容易地在内容中插入一个页面,或者从一个服务中插入一个ajax。

这是一个可折叠面板的示例,其中包含带标题的内容。这些面板是由The服务加载的。单击以展开面板。

http://gosylvester.com/blog.aspx?id=39

票数 1
EN

Stack Overflow用户

发布于 2013-11-20 06:15:26

您是否尝试在可折叠面板扩展器上设置SuppressPostBack="True“

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19425917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档