我需要一個具有複選框的樹視圖,當它們展開時異步獲取數據以填充節點,並在點擊複選框時自動檢查/取消選中/ 。以編程方式在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()" />
有用的事情。我想我並不是完全清楚,因爲問題不在於發佈的代碼......只是說明了這樣讀者就會知道我是如何回覆帖子的,因爲它與Page_Load是如何相關的(n' t)被調用。 – BVernon