我现在有一个部分可行的解决方案。
我按照 Ian 的建议查看了工具包源。在CollapsiblePanelBehavior.debug.js
中,您expandPanel()
显然可以将其作为行为的公共接口的一部分。还有一个get_Collapsed()
。在 javascript 中访问这些行为的关键似乎是在 ASP.NET 中的标记BehaviorID
上设置属性。CollapsiblePanelExtender
我修改了页面上的转发器,以便BehaviorID
s 是可预测的,如下所示:
<ajaxToolkit:CollapsiblePanelExtender
BehaviorID="<%#'collapsebehavior'+DataBinder.Eval(Container.DataItem,'id')%>"
ID="CollapsiblePanelExtender" runat="server" />
这会导致名为collapsebehavior1
、collapsebehavior2
、collapsebehavior3
等的行为。
完成此操作后,我可以展开客户端上的所有可折叠面板,如下所示:
function expandAll() {
var i = 0;
while (true) {
i++;
var name = 'collapsebehavior' + i;
var theBehavior = $find(name);
if (theBehavior) {
var isCollapsed = theBehavior.get_Collapsed();
if (isCollapsed) {
theBehavior.expandPanel();
}
} else {
// No more more panels to examine
break;
}
}
}
我确信$find
在这样的循环中使用确实效率很低,但这就是我到目前为止所拥有的。
此外,由于某种原因,它在 Firefox 上不起作用。(在 FF 上,只有第一个元素展开,然后在 Control Toolkit 代码中出现 Javascript 错误。)
对于所有 javascript 专业人士来说,这一切看起来都非常难看。也许我稍后会收拾东西,或者你可以帮帮我。