目前我已经构建了一个collapseControl,它的行为类似于一个标签(associatedControlID)来控制控件的折叠状态。
我想生成以下控件:
collapsableArea http://img692.imageshack.us/img692/3307/stackoverflowcollapseab.jpg
我想到了这样的事情:
将我已经生成collapsableControl和其他一些控件(例如Panel)放在一起,以得到一个collapsableArea。
第一次尝试:
我尝试扩展面板并执行以下操作:
this.Parent.Controls.Add(collapsableControl);
但这给了我:“生命周期步骤不正确”、“无法修改”、“nullReference”、...异常
所以我又试了一次(我相信这是更好的选择,因为没有得到tagKey):
我扩展了一个占位符并执行了以下操作:
this.Controls.Add(collapsableControl);
this.Controls.Add(collapsablePanel);
这引起了其它问题,例如:我只想设置面板的文本,面板的样式,...
连线!
对于这种情况,您有什么解决方案吗?
编辑:
我想出了另一个办法:
another solution http://img109.imageshack.us/img109/3307/stackoverflowcollapseab.jpg
“CollapsableArea”属于“Control”类型,包含2个额外的私有属性:
1.“可折迭控件”
1.“面板”
我认为将CollapsableArea.Controls的getter重定向到CollapsableArea.Panel.Controls.就足够了。在CollapsableArea.CreateChildControls()中,我示例化并将CollapsableControl和Panel添加到基控件中,并在CollapsableArea.RenderChildren()中呈现这两个控件
我现在的问题:CollapsableControl将获取一个clientID(不设置ID)-面板将不呈现如果面板包含〈% %〉标记,CollapsableControl将失败(或传递出去)
有什么建议吗?
**edit:**我修复了缺少ID的行为-只需将CollapsableControl.AssociatedControlID设置为Panel.ClientID...但是-将〈% %〉放入面板时,它不会被渲染??!!
3条答案
按热度按时间vsikbqxv1#
如果你想要一个简单的面板,而不是重新发明轮子,你可以使用可折叠面板控件:
http://www.asp.net/AJAX/AjaxControlToolkit/Samples/CollapsiblePanel/CollapsiblePanel.aspx
可能是获得您所追求的功能的最简单方法?
nkoocmlb2#
哦,怎么会-我解决了这个问题:
qncylg1j3#
你的控件应该有一个Template控件属性来定义可折叠的内容。正如你所说的,还有一个AssociatedControlID属性来获取Label控件的id。
您必须向页面的启动脚本注册一个jquery。