屏蔽TreeView服务器端事件,添加有效的客户端事件

最近项目需要使用TreeView,客户说点击一下刷屏很不爽,查了查TreeView,发现MS居然不提供客户端响应事件的功能,也就说一定要使用服务器端响应事件,这个白痴的MS,很多时候TreeView是不需要服务器响应的,居然把什么都做到服务器中去,想考验服务器的水平啊。
先是到网上找了一大堆资料,结果发现都不能解决问题,过程就不说了,结果才是别人的,过程就留给自己吧。最后还是自己想办法,基本的思路是从客户端相办法。在客户端用javascript把树的节点链接中的onclick及href给替换掉,有了这个思路就好解决了。看代码:

     var treeView = document.getElementById("<% = this.treeClass.ClientID %>");  //获取容器对象
     var items = treeView.getElementsByTagName("A");  //获取所有A的tag(也就是链接了)
   //循环替换
     for(var i = 0; i < items.length; i++)
     {
         var eventStr = items[i].href;
        //要判断链接中是否包含TreeView_ToggleNode,因为TreeView_ToggleNode这个函数是负责折叠的,所以不能置空
         if (eventStr.indexOf("TreeView_ToggleNode") == -1)
         {
             items[i].onclick = "";   //将链接的onclick事件置空
             items[i].href = "###";
         }
     }

然后我们在创建树的时候:

 TreeNode  node = new TreeNode();
 node.Value = value;
 node.Text = string.Format(
 "<span onclick="return ClickNode('{0}','{1}', this)">{0}</span>", 
 text, value);

这里的ClickNode就是客户端的JS代码了,你可以以任何的代码替代。实际上原理很简单:

  1. 通过TreeView的客户端ID,获取该容器下的所有链接
  2. 循环屏蔽节点的链接A的事件(onclick)及href
  3. 在链接的文本(最终输出<a></a>中间的内容)加入<span onclick=Event>Text</span>

说明:今天发现了一个方法,就是把node的SelectAction设置为TreeNodeSelectAction.Expand或者TreeNodeSelectAction.None可以解决这个问题,我为我自己的无知向读者道歉,并为自己未了解TreeView的功能而向微软抱怨及大放厥词感到羞愧。我决定不删除这篇文章,以警示我在以后的道路上谨慎求知。

  

注意:本文为我的独立博客镜像博客,自发表不再更新,原文可能随时被更新,敬请访问原文。同时,请大家不要在此评论,如果有什么看法,请点击这里:http://iove.net/1705/

本文来自http://iove.net,欢迎转载,转载敬请保留相关链接,否则视为侵权,原文链接:http://iove.net/1705/

转载于:https://www.cnblogs.com/conis/archive/2008/01/16/1720545.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值