2014-05-23 20 views
0

我需要一個具有複選框的樹視圖,當它們展開時異步獲取數據以填充節點,並在點擊複選框時自動檢查/取消選中/ 。以編程方式在asp.net webforms中分配事件的正確方法

沒有開箱即用的唯一部分是當他們的子/父節點被點擊時檢查/取消選中子/父節點。雖然有一個事件可用於單擊複選框時,它不會自動回發,所以我添加了一些JavaScript來實現它。

當我直接從控件獲取數據時,它工作得很好,但是當我決定重構控件以便在其他地方使用它時,我決定創建一個消費代碼將分配給的事件,以便爲控制提供一種從正確的地方獲取數據的方法。

我在控件所在頁面的Page_Load上分配給我的事件,這適用於展開節點,因爲事件在每個回發的開始處被重新分配。但是,當我單擊複選框時,控件所在頁面的Page_Load事件不會被調用,因此事件不會被分配給該頁面。

我已經計劃實現一個替代解決方案,它將使用jQuery在客戶端進行檢查/取消選中而不回發,但我真的很想知道處理這種情況的正確設計模式。

下面是顯示我如何回發的aspx。如果需要,或者我的解釋不清楚,我可以發佈其他代碼。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="DepartmentTreeView.ascx.cs" Inherits="TrainUp.Web.Lms.Mtv.Controls.RequiredTraining.DepartmentTreeView" %> 


    <script type="text/javascript"> 
     <%-- This is used to cause a postback when a checkbox is clicked, 
      which allows the DepartmentTree_TreeNodeCheckChanged event to get raised --%> 
     function postBackByObject() { 
      var o = window.event.srcElement; 
      if (o.tagName == "INPUT" && o.type == "checkbox") { 
       __doPostBack("", ""); 
      } 
     } 

    </script> 

    <asp:TreeView ID="DepartmentTree" SkinId="Contacts" runat="server" 
      OnTreeNodePopulate ="DepartmentTree_TreeNodePopulate" 
      OnTreeNodeCheckChanged="DepartmentTree_TreeNodeCheckChanged" 
      OnClick="javascript:postBackByObject()" /> 

回答

0

不能添加評論,但它聽起來像是你不把在頁面生命週期的正確狀態代碼再次使您的樹視圖。您可以使用webcontrol重用樹視圖,或者將js文件中的所有邏輯封裝起來,並在每個需要使用它的頁面上引用它。

0

其實我沒有看到問題,代碼應該工作得很好。不過,我建議您更改您的JavaScript代碼,因爲它不適用於Firefox(window.event.srcElement doesn't work for firefox?

function postBackByObject(e) { 
    var evt = e || window.event; 
    var o = evt.target; 
    if (o.tagName == "INPUT" && o.type == "checkbox") { 
     __doPostBack("", ""); 
    } 
} 

<asp:TreeView ID="DepartmentTree" runat="server" ShowCheckBoxes="All" 
    ShowExpandCollapse="true" 
    OnTreeNodePopulate="DepartmentTree_TreeNodePopulate" 
    OnTreeNodeCheckChanged="DepartmentTree_TreeNodeCheckChanged" 
    OnClick="postBackByObject(event);" /> 
+0

有用的事情。我想我並不是完全清楚,因爲問題不在於發佈的代碼......只是說明了這樣讀者就會知道我是如何回覆帖子的,因爲它與Page_Load是如何相關的(n' t)被調用。 – BVernon

相關問題