您的位置:首页 > 其它

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

2008-04-17 14:54 597 查看
今天想写几个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发生了未处理的异常。

集合已修改;可能无法执行枚举操作。

以上问题我百思不得其解,在网上查找资料,都是语焉不详,要么要我检查环境配置,要么只提出问题没有给出解决办法。我只有自己想办法解决。

打开微软的例子程序页面,复制它的代码到页面

<ajaxToolkit:Accordion

ID="MyAccordion"

runat="Server"

SelectedIndex="0"

HeaderCssClass="accordionHeader"

HeaderSelectedCssClass="accordionHeaderSelected"

ContentCssClass="accordionContent"

AutoSize="None"

FadeTransitions="true"

TransitionDuration="250"

FramesPerSecond="40"

RequireOpenedPane="false"

SuppressHeaderPostbacks="true">

<Panes>

<ajaxToolkit:AccordionPane

HeaderCssClass="accordionHeader"

HeaderSelectedCssClass="accordionHeaderSelected"

ContentCssClass="accordionContent">

<Header> . . . </Header>

<Content> . . . </Content>

</ajaxToolkit:AccordionPane>

.

.

.

</Panes>

<HeaderTemplate>...</HeaderTemplate>

<ContentTemplate>...</ContentTemplate>

</ajaxToolkit:Accordion>

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

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

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

总结:

1、从设计器中的panes添加AccordionPane出现错误是Accordion控件的一个bug,解决方法就是添加Accordion后手工增加<Panes></Panes>然后直接从工具箱中拖AccordionPane。

2、新增的AccordionPane如果不修改HeaderCssClass="accordionHeader" ContentCssClass="accordionContent"报呈现错误是Accordion的第二个bug,可以通过修改AccordionPane的源代码实现,如果不想修改就只有手动修改了。



AjaxControlToolkit.dll文件的获得方法:

1、在http://asp.net/ajax上下载ajaxcontroltoolkit-framework3.5-nosource.zip,解开,得到AjaxControlExtender.vsi,将这个文件的扩展名改成.zip,然后解压,在解压的目录下得到AjaxControlExtenderProjectCS.zip,再解压,就得到AjaxControlToolkit.dll;或者安装AjaxControlExtender.vsi,然后到”我的文档\Visual Studio 2008\Templates\ProjectTemplates\Visual C#\“找AjaxControlExtenderProjectCS.zip,解压,也可以得到AjaxControlToolkit.dll。

2、下载ajaxcontroltoolkit-framework3.5.zip然后解压,用vs2008编译,在ajaxcontroltoolkit-framework3.5\AjaxControlToolkit\bin\Release中有AjaxControlToolkit.dll。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: