关于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发生了未处理的异常。
集合已修改;可能无法执行枚举操作。
以上问题我百思不得其解,在网上查找资料,都是语焉不详,要么要我检查环境配置,要么只提出问题没有给出解决办法。我只有自己想办法解决。
打开微软的例子程序页面,复制它的代码到页面
去掉不相关的部分,发现控件呈现和运行都没问题。我试着将这段代码中的AccordionPane的相关属性去掉,发现去掉
而设计器添加的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。
具体问题如下:
安装好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。
相关文章推荐
- 关于AjaxControlToolkit的Accordion控件在vs2008下报错的问题及解决办法
- 关于AjaxControlToolkit的Accordion控件在vs2008下报错的问题及解决办法
- AjaxControlToolkit工具控件之Accordion错误解决方法
- VS2003升级到2005后使用AjaxControlToolkit的一诡异问题(已找到解决办法,求解原因)
- 关于asp.net中ajax的问题:AjaxControlToolkit 未定义的解决方法
- 关于aps.net ajax controltoolkit 控件collapse extender的问题
- .net3.5 和vs2008中Ajax控件的使用--AjaxControlToolkit的安装
- 动态创建ASP.NET AJAX Control Toolkit中的Accordion控件
- 关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法
- 第十二篇: Ajax Control Toolkit 控件包--1. Accordion (多层折叠效果)
- Ajax Control Toolkit Accordion 服务器端控件
- 关于django1.7.7使用ajax后出现“CSRF token missing or incorrect”问题的解决办法
- ★ AjaxControlToolkit 微软出的ajax.net 工具使用教程二 Accordion(折叠)控件的使用
- 编译AjaxControlToolkit错误的解决办法
- Accordion控件报错的问题及解决办法
- 关于使用AjaxControlToolKit进度条的一些问题和思考
- 关于ajax的get提交中文乱码问题探究及解决办法
- Ajax Control Toolkit Animation问题解决
- Ajax Control Toolkit Animation问题解决
- 关于PHP Ajax跨域问题的解决办法