分享:Microsoft IE Webcontrols Treeview的一个bug及修正

原创 2005年02月25日 22:40:00

首先感谢思归指点了我如何重用Treeview这个Microsoft IE Webcontrol。相关内容请参见http://community.csdn.net/Expert/TopicView.asp?id=3365114

  IE webcontrol可以单独用于html文件中,也可以用于web form的.net 程序;
  对于后者,使用中可以通过编程加入节点,也可以绑定;
  对于后者,绑定的时候,可以帮定一个xml格式的字符串,也可以绑定一个xml文件,只要向Treeview控件的TreeNodeSrc属性赋值;
  对于后者,有两种可能,一种是绑定到一个已经存在于硬盘的xml文件,或者说TreeNodeSrc的值设定为"...../foo.xml"上、另一种则是先创建一个aspx页面动态产生xml格式的输出,绑定到这个页面。
  对于后者,会产生错误。

  原因是,Treeview控件其实有两个地方可以绑定,或者说,解析数据源产生树的结构,一是在Server Side,一是在Browser Side。在Treeview控件Render的过程中,如果发现TreeNodeSrc是一个地址,它就会试图读这这个地址的内容,然后解析,并显式的写到web页面的输出中,这里会产生错误。

  我的解决方法是,定义一个扩充的属性TreeNodeSrcA,它不在server端被解析,而是原封不动的写到Browser side,然后Treeview的htc再读取TreeNodeSrcA指向的url的内容,并解析。

  具体步骤如下:

一、在Treeview的源程序treeview.cs文件的

public class TreeView : BasePostBackControl

的部分加入这样一段


/// <summary>
/// Url of the xml file to import as the TreeNode content of the tree, Browser Side Binding
/// </summary>
[
Category("Data"),
DefaultValue(""),
PersistenceMode(PersistenceMode.Attribute),
ResDescription("TreeNodeSrcA"),
]
public string TreeNodeSrcA
{
    get
    {
        object str = ViewState["TreeNodeSrcA"];
        return ((str == null) ? String.Empty : (string)str);
    }
    set
    {
        ViewState["TreeNodeSrcA"] = value;
    }
}

它的作用是定义一个叫TreeNodeSrcA的属性。

二、在Treeview的源程序treeview.cs文件的

protected override void RenderUpLevelPath(HtmlTextWriter output)

方法中加入这样一段

if (TreeNodeSrcA != String.Empty)
    output.AddAttribute("treeNodeSrcA", TreeNodeSrcA);

它的作用是如果TreeNodeSrcA属性非空则写到web页面的输出中。

三、编译生成dll文件并引用

四、在Treeview的脚本文件treeview.htc的相应位置分别加入:

<public:property name="treeNodeSrcA" id="_tvpropTreeNodeSrcA" GET="getTreeNodeSrcA" PUT="setTreeNodeSrcA" />

var prop_treeNodeSrcA = null;

function getTreeNodeSrcA()
{
    return prop_treeNodeSrcA;
}

function setTreeNodeSrcA(value)
{
    if (prop_treeNodeSrcA != value)
    {
        prop_treeNodeSrcA = value;
    }
}

这是说明定义一个htc里的属性,设置变量来存放,并设置读写它的方法。

五、在Treeview的脚本文件treeview.htcfunction oncontentready()中,在
    if (treeNodeSrc != null)
之前,加入:
    if (treeNodeSrcA != null)
     treeNodeSrc = treeNodeSrcA;

这就保证了创建的时候,如果扩展属性treeNodeSrcA非空,就会用它来填补treeNodeSrc,这时Browser就会去读数据源并解析、绑定。

【athossmth原创,转载请注明,谢谢】

相关文章推荐

jquery treeview插件在ie6上的bug修正

使用jquery 的treeview插件,在ie6上运行时,如果树对象包含在table中,则树的显示行为不正常,本来应该打开的节点,显示为关闭。 经过问题查找,发现是由于ie6不支持css搜索引起的...

Microsoft excel中的一个小BUG

现在本人在做系统维护,然后有时候客户提供的数据与系统数据不同,需要修改,但是修改之后客户说还有一个地方不对,我就纳闷了,明明全是按照客户给的数据去修改,怎么会不对呢。。于是仔细核对了一下两边的数据,发...

Microsoft.Web.UI.WebControls

  • 2008年11月07日 10:58
  • 56KB
  • 下载

ie9 ff11, javascript 数组处理的一个bug

我也知道是bug,还是本来就是这样的 看js代码:   var ep={ title:"默认相册", desc:"快来上传照片吧", img:"http://pic.**m...403d0c29...
  • leinchu
  • leinchu
  • 2012年05月16日 20:11
  • 1217

Microsoft.Web.UI.WebControls.dll

  • 2008年03月02日 18:25
  • 182KB
  • 下载

IE 中多出一个字的 BUG

今天遇到一个很奇怪的问题,在 IE 6 中查看网页,发现某个 li 的最后一个字又在下一行出现了,但代码中并没有多出一个字。 这是 IE 6 的一个 BUG。我最终发现去掉了其上层上层容器的 flo...
  • afeilxc
  • afeilxc
  • 2011年11月02日 09:56
  • 578

关于a标签中图文链接在IE的一个BUG分析

此文中提到的问题是在IE6/IE7中出现的 在五一之前Rock给了我一个很好玩的demo,当时我看到他所给代码跟截图时心中想到这个解决方法应该有很多哦,为什么一定要这样折腾自己呢,搞那么问题BUG出...

IE9 RC版关于overflow的一个bug

问题可以简单描述为在overflow=auto的容器内,切换其中元素的class时,会影响到容器的样式 上代码:...
  • Occam
  • Occam
  • 2011年03月02日 17:15
  • 1193

记一个比较诡异的“bug”-快速点击下,ie下面a标签(javascript:void(0))打开新页面

记一个比较诡异的“bug”-快速点击下,ie下面a标签(javascript:void(0))打开新页面...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分享:Microsoft IE Webcontrols Treeview的一个bug及修正
举报原因:
原因补充:

(最多只允许输入30个字)