我的TreeView出现问题。
My TreeView位于UserControl中。 在第一页上,UserControl直接放在内容页面上。一切正常。
示例(工作):
<a id="MainContent_CategoryTreeView1_TreeView1n209" href="javascript:TreeView_ToggleNode(MainContent_CategoryTreeView1_TreeView1_Data,209,MainContent_CategoryTreeView1_TreeView1n209,' ',MainContent_CategoryTreeView1_TreeView1n209Nodes)">
<img src="demo.jpg" />
</a>
在第二页上,UserControl被放置在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,' ',MainContent_CategoryTreeView1_TreeView1n209Nodes)">
<img src="demo.jpg" />
</a>
这是ASP.Net TreeView的错误吗?知道如何解决这个问题吗?
编辑:
也可能很有趣:无论何时首先加载TreeView,我都会在代码中构建层次结构并将rootNode保存到Cache中。因此,我的页面加载事件如下所示:
if (CacheFacade.CategoryTreeView == null)
var rootNode = BuildHierachy();
CacheFacade.CategoryTreeView = rootNode;
//databind rootNode to TreeView
else
//databind from CacheFacade.CategoryTreeView
这就是混淆生成的javascript的原因。 但为什么? javascript中包含生成的客户端ID。是不是渲染的一部分(在PageLoad之后)?
答案 0 :(得分:1)
好的,我发现了问题所在:
在这种情况下,无法将TreeNodeCollection(或rootNode)存储在缓存中。
我想,缓存整个集合是一个聪明的主意,以节省构建层次结构的时间。但是如果我尝试将UserControl放在另一个页面中(在另一个容器中),生成的展开/折叠javascript就会混乱(客户端ID不正确)。
嗯,对于未来: