阿不

不抛弃,不放弃

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  157 随笔 :: 0 文章 :: 1979 评论 :: 53 Trackbacks

在atlas的时候,在UpdatePanel中使用Menu控件是不会出错的,但是正式命名为asp.net ajax后,从beta1开始,在UpdatePanel 中就无法正常使用Menu控件了,一直到RTM也没有解决这个问题。在asp.net ajax的官方文档中也有这样的说明(原文http://ajax.asp.net/docs/overview/UpdatePanelOverv...):

The following ASP.NET controls are not compatible with partial-page updates, and are therefore not supported inside an UpdatePanel control:

其它几个控件都有前提条件,唯独TreeView,Menu和WebParts控件都不支持。那是不是真的就没有办法了呢?

目前只遇到Menu无法使用,先来回放一下在UpdatePanel中使用Menu控件会出现什么样的脚本错误呢?

我是用Menu和MultiView来实现Tab控件的效果,但是在UpdatePanel中,首次转换选项页不会出错,但当我再次将鼠标移到选项按钮时就会出现:

'0.cells'为空或不是对象 的脚本错误提示。跟踪调试错误脚本

at http://localhost:15159/WebResource.axd?d=YEs0K3CeKJkuxCHKobf0Fg2&t=633046464802812500 [220]
Menu_HideItems
code: i < rows[0].cells.length
at http://localhost:15159/WebResource.axd?d=YEs0K3CeKJkuxCHKobf0Fg2&t=633046464802812500 [525]
Menu_SetRoot
code: Menu_HideItems()
at http://localhost:15159/WebResource.axd?d=YEs0K3CeKJkuxCHKobf0Fg2&t=633046464802812500 [39]
Menu_Expand
code: Menu_SetRoot(item)
at http://localhost:15159/WebResource.axd?d=YEs0K3CeKJkuxCHKobf0Fg2&t=633046464802812500 [297]
Menu_HoverStatic
code: Menu_Expand(node, data.horizontalOffset, data.verticalOffset)
at http://localhost:15159/MasterPage.aspx [26]
JScript - form1 anonymous function
code: el="stylesheet" /><lin

会发现是在Menu_HideItems函数内部出错了。可以根据脚本资源地址下载到脚本文件,得到Menu_HideItems原型定义。然后利javascript的却态特性,我们可以重写这个方法,来屏蔽这个错误。在官方论坛上找到这样一段js代码,把它拷到出错的页面上,就马上可以解决这个问题了。

var oldMenu_HideItems = Menu_HideItems; if(oldMenu_HideItems) { Menu_HideItems = function(items){ if (!items || ((typeof(items.tagName) == "undefined") && (items instanceof Event))) { items = __rootMenuItem; } if(items && items.rows && items.rows.length == 0){ items.insertRow(0); } return oldMenu_HideItems(items); } }

 

原文地址是:http://forums.asp.net/thread/1517884.aspx

我不知道这种办法能否也同样用在TreeView出错时,因为我没有在UpdatePanel中使用过TreeView。不过这种办法确实给我提供了解决控件内部js脚本错误的一个很好的思路。

阿不 http://hjf1223.cnblogs.com
posted on 2007-03-16 11:05 阿不 阅读(3136) 评论(3)  编辑 收藏 所属分类: JavaScript相关技术

评论

#1楼  2007-03-16 11:51 Cat Chen      
应该是Menu和TreeView的加载过程特殊性,导致和UpdatePanel冲突,这是无法从外部解决的问题,除非用ControlAdapter改变加载过程吧,但这看起来不容易。
  回复  引用  查看    

#2楼  2007-06-08 10:14 aabbcc [未注册用户]
谢谢 你的solution帮助我解决了问题.
  回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-03-16 15:55 编辑过
 
另存  打印
最新IT新闻:
· Joost借道TOM在线 将正式进军中国
· 微软副总裁公开承认Vista存在问题
· 互联网DNS存在重大漏洞 黑客可能控制网络流量
· Opera提出网络标准课程 发布标准教育倡议
· SubSonic 2.1 版本发布