这个事件不会主动postback,需要手动写javascript触发。对网上找到的方法做了些改进,增加UpdatePanel,以免页面不停的刷。这里就不考虑性能神马的了,因为既然项目已经允许选择使用TreeView服务器控件了,也就不要在乎多一个UpdatePanel了。
- 前台页面
1 <html> 2 <head runat="server"> 3 <title></title> 4 5 <script type="text/javascript"> 6 function postBackByObject() { 7 var o = window.event.srcElement; 8 if (o.tagName == "INPUT" && o.type == "checkbox") { 9 //第一个参数写UpdatePanel的ID,否则就是整个页面刷了 10 __doPostBack("UpdatePanel1", ""); 11 } 12 } 13 </script> 14 15 </head> 16 <body> 17 <form id="form1" runat="server"> 18 <asp:ScriptManager ID="ScriptManager1" runat="server"> 19 </asp:ScriptManager> 20 <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 21 <ContentTemplate> 22 <asp:TreeView runat="server" ID="treeView1" 23 OnTreeNodeCheckChanged="treeView1_TreeNodeCheckChanged"> 24 </asp:TreeView> 25 </ContentTemplate> 26 </asp:UpdatePanel> 27 </form> 28 </body> 29 </html>
- 后台页面
1 protected void Page_Load(object sender, EventArgs e) 2 { 3 if (!IsPostBack) 4 { 5 treeView1.Attributes.Add("onclick", "postBackByObject()"); 6 } 7 }