ASP.NET 2.0使用TreeView控件時發現帶有CheckBox控件的TreeNode對象(TreeView節點),選擇CheckBox無法回發頁面。在MSDN中對於TreeView.TreeNodeCheckChanged事件有一段備註:“當 TreeView 控件的複選框在兩次向服務器發送之間更改狀態時,會引發 TreeNodeCheckChanged 事件。這使您可以提供一個這樣的事件處理方法,即每次發生此事件時執行一個自定義例程(如更新數據庫或顯示的內容)。儘管 TreeNodeCheckChanged 事件在回發時激發,但更改複選框不會導致回發。”說明框架本身並不能提供一個CheckBox回發的機制.
儘管點擊CheckBox不會引起回發, 但是頁面回發以後, TreeNodeCheckChanged事件的處理代碼就會被調用, 也就是將如果在客戶端捕獲checkbox的點擊事件, 然後使用javascript來手工回發(dopostback), 這樣就能做到checkbox的自動回發了.
但是在構建樹的時候, 是沒有辦法在treenode上定義事件, 所以我們把這個事件加在treeview上.
demo如下:
this.TreeViewKpi.Attributes.Add("onclick", "postBackByObject()");
客戶端腳步代碼
function postBackByObject()
{
var o = window.event.srcElement;
if (o.tagName == "INPUT" && o.type == "checkbox")
{
__doPostBack("","");
}
}
1、客戶端