关于AjaxControlToolkit的Accordion控件在vs2008下报错的问题及解决办法

本文解决了一个关于AjaxControlToolkit中Accordion控件的显示问题。通过调整AccordionPane的属性和手动添加必要的元素,成功解决了控件在VS2008中显示异常的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天想写几个AjaxControlToolkit的例子程序,给部门的同事看看,谁知第一个控件Accordion就给我当头一棒,报错,控件显示不正常,令我郁闷了好几个小时,在网上搜索了好久,虽然有人提出过这个问题,但没人找出原因和解决办法,在我的努力下终于找出了解决办法。
具体问题如下:
   
安装好vs2008,然后新建asp.net Web应用程序项目,拷贝AjaxControlToolkit.dll文件到项目目录下,添加AjaxControlToolkit的选项卡,并添加全部控件。新建一个空白页面,切换到设计视图,拖一个ScriptManager,再拖一个Accordion,然后切换到源视图,选中刚才拖的Accordion,应该叫Accordion1。在属性窗口中查看Accordion1的各项属性,发现有一个Panes属性。选中,添加几个AccordionPane,确定。然后页面切换到设计视图,发现Accordion1报错:创建控件时出错 - Accordion1类型“AjaxControlToolkit.Accordion”不具有名为“AccordionExtender”的公共属性。
再查看源视图,发现Accordion1里面增加了<ajaxToolkit:AccordionExtender ID="Accordion1_AccordionExtender" runat="server" 
            Enabled="True" TargetControlID="Accordion1"></ajaxToolkit:AccordionExtender>
这样的代码,参考AjaxControlToolkit的例子程序,发现添加的AccordionPane应该包括在<Panes></Panes>之间。手工去掉AccordionExtender相关代码,并增加<Panes></Panes>,将AccordionPane包含到<Panes></Panes>之间,再进入设计视图,发现又报错:呈现控件时出错 - Accordion1发生了未处理的异常。
集合已修改;可能无法执行枚举操作。
以上问题我百思不得其解,在网上查找资料,都是语焉不详,要么要我检查环境配置,要么只提出问题没有给出解决办法。我只有自己想办法解决。
打开微软的例子程序页面,复制它的代码到页面

说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gif<ajaxToolkit:Accordion
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gifID=
"MyAccordion"
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gifrunat=
"Server"
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gifSelectedIndex=
"0"
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gifHeaderCssClass=
"accordionHeader"
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gifHeaderSelectedCssClass=
"accordionHeaderSelected"
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gifContentCssClass=
"accordionContent"
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gifAutoSize=
"None"
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gifFadeTransitions=
"true"
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gifTransitionDuration=
"250"
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gifFramesPerSecond=
"40"
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gifRequireOpenedPane=
"false"
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gifSuppressHeaderPostbacks=
"true">
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gif<Panes>
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gif<ajaxToolkit:AccordionPane
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gifHeaderCssClass=
"accordionHeader"
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gifHeaderSelectedCssClass=
"accordionHeaderSelected"
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gifContentCssClass=
"accordionContent">
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gif<Header> . . . </Header>
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gif<Content> . . . </Content>
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gif</ajaxToolkit:AccordionPane>        
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gif.
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gif.
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gif.
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gif</Panes>            
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gif<HeaderTemplate>说明: http://www.cnblogs.com/Images/dot.gif</HeaderTemplate>
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gif<ContentTemplate>说明: http://www.cnblogs.com/Images/dot.gif</ContentTemplate>
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gif</ajaxToolkit:Accordion>
说明: http://www.cnblogs.com/Images/OutliningIndicators/None.gif

去掉不相关的部分,发现控件呈现和运行都没问题。我试着将这段代码中的AccordionPane的相关属性去掉,发现去掉

ContentCssClass="accordionContent" HeaderCssClass="accordionHeader" 或设置ContentCssClass="" HeaderCssClass=""将报控件呈现错误。

而设计器添加的AccordionPane以上两项属性都是空的,估计AccordionPaneContentCssClassHeaderCssClass属性都不能为空。为了验证我的猜测,我删除了拷贝自微软的例子代码,再新增一个Accordion1,然后进入源视图,手工增加<Panes></Panes>,然后从工具箱上直接拖两个AccordionPane<Panes></Panes>之间(这个方法是试出来的)。然后设置新增的AccordionPaneHeaderCssClass="accordionHeader"  ContentCssClass="accordionContent" ,再进入设计视图,OK,一切正常。


总结:
1
、从设计器中的panes添加AccordionPane出现错误是Accordion控件的一个bug,解决方法就是添加Accordion后手工增加<Panes></Panes>然后直接从工具箱中拖AccordionPane
2
、新增的AccordionPane如果不修改HeaderCssClass="accordionHeader"  ContentCssClass="accordionContent"报呈现错误是Accordion的第二个bug,可以通过修改AccordionPane的源代码实现,如果不想修改就只有手动修改了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值