2011-06-06 63 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,不!