2011-06-06 39 views
1

我的TreeView出现问题。Javascript问题展开图像

我的TreeView在UserControl中。 在第一页上,UserControl直接放置在内容页面上。一切正常。

例子(工作):

<a id="MainContent_CategoryTreeView1_TreeView1n209" href="javascript:TreeView_ToggleNode(MainContent_CategoryTreeView1_TreeView1_Data,209,MainContent_CategoryTreeView1_TreeView1n209,&#39; &#39;,MainContent_CategoryTreeView1_TreeView1n209Nodes)"> 
    <img src="demo.jpg" /> 
</a> 

在第二页上,该用户控件被放置在TabContainer的(的TabPanel)。用于展开的JavaScript不起作用。

我发现什么出来就是,表格单元格的ID,则扩展图像被放置在,不同于其中JavaScript是在href

例如(不工作):

<a id="MainContent_TabContainer_tbPbl_Categories_CategoryTreeView1_TreeView1n209" href="javascript:TreeView_ToggleNode(MainContent_CategoryTreeView1_TreeView1_Data,209,MainContent_CategoryTreeView1_TreeView1n209,&#39; &#39;,MainContent_CategoryTreeView1_TreeView1n209Nodes)"> 
    <img src="demo.jpg" /> 
</a> 

这是ASP.Net TreeView的错误吗?任何想法如何解决这个问题?

编辑:

可能是有趣太:每当TreeView控件第一次加载,我在代码生成的层次和根节点保存到缓存。所以,我的页面加载事件看起来像:

if (CacheFacade.CategoryTreeView == null) 
    var rootNode = BuildHierachy(); 
    CacheFacade.CategoryTreeView = rootNode; 
    //databind rootNode to TreeView 
else 
    //databind from CacheFacade.CategoryTreeView 

这是什么混乱生成的JavaScript了。 但是为什么? JavaScript中有生成的客户端ID。是不是渲染的一部分(在PageLoad之后)?

回答

1

好吧,我发现了问题是什么在这里:

在这种情况下,这是不可能的TreeNodeCollection(或根节点)存储在缓存中。

我认为,这是一个聪明的想法,缓存整个集合,以节省构建层次的时间。但是,如果我尝试将用户控件放在另一个页面(在另一个容器中),生成的展开/折叠JavaScript会混乱(客户端ID不正确)。

那么,对于未来:

  • 缓存中的数据,TreeView控件是建立在,是的!
  • 缓存rootNode,不!