簡體   English   中英

如何使Web用戶控件的子控件的事件導致Catchall事件在每次回發時在父級觸發

[英]How To Make A Web User Control's Child Control's Events Cause A Catchall Event To Fire On The Parent Once Per Postback

假設我有一個Web用戶控件,其中包含多個下拉列表。 它們都設置為AutoPostBack = true,但是控件中的每個SelectedIndexChanged事件處理程序都會觸發/鏈接我為其他DDL定義的其他SelectedIndexChanged處理程序。 這意味着,當用戶更改單個DDL時,將為其他幾個DDL鏈接/觸發事件處理程序。 鏈接事件的邏輯非常復雜,由數據驅動,並且可以根據用戶實際更改的列表而改變。 因此,很難確定哪個事件處理程序將最后觸發。

從頁面的角度來看,我想在用戶控件上訂閱一個SelectionChanged事件,該事件每次回發將僅觸發一次,而不會觸發所有事件處理程序。 我不在乎哪個事件處理程序已觸發,僅是整個控件的狀態已更改。

我正在使用C#3.5 / ASP.NET 2.0 / VisualStudio 2008

我該怎么做呢?

編輯:將澄清移到原始說明中。 我認為我指定AutoPostBack = true但未指定發生鏈接的事實令人誤解。 對此我感到抱歉。

這取決於您何時需要在頁面生命周期中觸發事件處理程序。

這是一種策略:

1)在您的用戶控件中,跟蹤下拉列表的選擇更改。 如果執行了事件處理程序,請更新本地跟蹤變量。

2)在用戶控件的PreRender處理程序中,檢查您的跟蹤變量,如果需要,則觸發用戶控件的SelectionChangedEvent。

該策略將確保頁面生命周期的事件處理階段已完成,但是具有一個缺點,即在PreRender階段之前,您的主頁不會在用戶控件上收到“ SelectionChanged”。 這可能會或可能不會適合您的情況。

如果需要為用戶控件更早地處理SelectionChanged事件,則可能必須在dropdownlist處理程序中放入更復雜的跟蹤邏輯,並添加一個跟蹤變量以確保用戶控件的“ SelectionChanged”事件僅被觸發一次。

我認為您需要在子控件中創建一個代理,然后將該委托引用到父控件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM