最近在做權限模塊,挺頭痛的東西。不包括權限部分的業務,還包括權限部分的界面實現。由於採用了微軟的Treeview控件來分配權限,所以碰到網上熱烈討論的有關TreeView操作的刷新問題,在眾位先人和同事的幫助下,終於使Treeview的問題得到了較好的解決。 1、前台控制展開,收縮,Check/UnCheck,後台控制SelectedIndexChanged。 解決方法: 將autopostback設置成false; 在body裡添加 <body onload="initTree()"> 然後在PageLoad裡寫: string strTreeName = "TreeView1"; string strRef = Page.GetPostBackEventReference(TreeView1); string strScript = "<script language=\"JavaScript\"> \n" + "<!-- \n" + " function initTree() { \n" +" " + strTreeName + ".onSelectedIndexChange = function() { \n" + "if (event.oldTreeNodeIndex != event.newTreeNodeIndex) \n" + "this.queueEvent(』onselectedindexchange』, event.oldTreeNodeIndex + 』,』 + event.newTreeNodeIndex); \n" + "window.setTimeout(』" + strRef.Replace("』","\\』") + "』, 0, 』JavaScript』); \n" + " } \n" + " } \n" + "// --> \n" + "</script>"; Page.RegisterClientScriptBlock("InitTree",strScript ); 2、在CheckBox情況下。在前台選擇checkbox後進行刷新,發現Checkbox的狀態變得混亂,有些應該被選上的被弄丟了。這個問題是微軟Treeview.htc中的一個bug,而且問題之前網上一直未發現有好的解決方法。昨天發現有位牛哥解決了這個問題,他完善了htc文件,並且在htc中增加了在checkbox情況下父子聯動的效果,對於需要實現這個功能而對JS不太熟的人真是個福音啊,因為這意味著你不用寫任何代碼就可以實現這個功能了,真是非常感激啊。我把這位牛哥文章的http提供給大家:http://blog.csdn.net/cuike519/archive/2005/02/02/278271.aspx 3、對於SelectedIndexChanged,可以做到進一步的自定義。即如果樹有三層,可以使點擊第一層,第二層時不進行Postback,只是在選擇第三層時才進行Postback。 這個其實就是在第一點上進行修改,對於onSelectedIndexChange 處發的條件進行擴充。上面代碼中只是判斷了如果新節點與舊節點不是同一節點,就觸發SelectedIndexChange,執行_dopostback,你只要將條件改成你想要的限制條件就可以做到你想要的控制。不過要注意if後面的語句啊,if後面沒有跟{號,如果你要加附加條件的話,意味著應該有條件的執行後面兩句。 以上就是我兩天來的成果,呵呵。
|
|