6

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

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);
   }
}
4

3 回答 3

1

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

诀窍是在打开面板时对内容进行 ajax。 您可以轻松地在内容中进行 jquery 以从 web 服务中插入页面或 ajax。

这是带有 ajaxed 内容的可折叠面板的示例。面板由 Web 服务加载。单击以展开面板。

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

于 2013-10-25T16:31:45.620 回答
1

基本上 CollapsiblePanelExtender 在回发期间保持其状态。但是在回发期间,我想您执行了数据绑定(我猜您有)。在数据绑定期间,所有控件都被重新创建,这就是它们失去内部状态的原因。

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

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

// To collapse panel.
this.CollapsiblePanelExtender1.ClientState = "true";

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

如果您仍想在客户端折叠/展开 CollapsiblePanelExtender,则需要类似于以下的代码:

Sys.Application.add_load(function() {
    var extender = $find('<%= this.CollapsiblePanelExtender1.ClientID  %>');

    extender.expandPanel();

    extender.collapsePanel();
});

编辑 这无济于事,因为您尝试在单击处理程序中恢复状态。当您调用网格视图控件的数据绑定时,不会立即重新创建行。因此,如果您想设置(恢复)可折叠扩展器控件的状态,最好在网格的 RowCreated 事件处理程序中进行。

例如,您可以使用与此类似的代码:

    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";
        }
    }
于 2013-10-21T14:17:23.203 回答
0

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

于 2013-11-19T22:15:25.577 回答