我對此比較陌生,但這裏是我的問題。從孩子分享價值到家長控制
在asp.net中,我有一個父母和孩子控制。在子控件中,我有一個下拉列表。根據下拉列表中選擇的值,我想在父級控制中切換Panel的可見性。例如,如果我選擇顯示在子控件下拉列表中,我需要將true傳遞給父控件以使Panel可見,反之亦然。我應該怎麼做。我已閱讀,可以通過事件處理完成,並已看到某些情況下,但我不清楚。請幫忙!
謝謝。
我對此比較陌生,但這裏是我的問題。從孩子分享價值到家長控制
在asp.net中,我有一個父母和孩子控制。在子控件中,我有一個下拉列表。根據下拉列表中選擇的值,我想在父級控制中切換Panel的可見性。例如,如果我選擇顯示在子控件下拉列表中,我需要將true傳遞給父控件以使Panel可見,反之亦然。我應該怎麼做。我已閱讀,可以通過事件處理完成,並已看到某些情況下,但我不清楚。請幫忙!
謝謝。
引發父控件偵聽的事件。
在後面的代碼爲你的父母控制,創建子控件的類型的對象。喜歡的東西:
private MyWebControl childControl;
然後在子控件定義事件
public event System.EventHandler SelectionChanged;
在你的DropDownList的OnIndexChanged情況下,你做你的處理後,提高你的事件:
if(this.SelectionChanged!= null)
{
this.SelectionChanged(this, new EventArgs());
// You can send the index of the DDL in the event args
}
在您的家長控制中,連接事件。Page_Init是在父母控制好
this.childControl.SelectionChanged+=new EventHandler(childControl_SelectionChanged);
儘管如此,定義方法
private void childControl_SelectionChanged(object sender, EventArgs e)
{
/// Do your processing here.
/// Grab the DDL's index from the EventArgs and do your processing
}
應該是所有你需要得到它的工作!
一種方式做到這一點是揭露下拉列表(公共)和你的父母控制檢查孩子控制下拉菜單,看看它是否應顯示或隱藏在頁面加載的面板。如果這項工作有效或不依賴頁面生命週期。
另一種方式來做到這一點是存儲在變化事件在ViewState中的下拉值。這樣,父控件就可以讀取ViewState參數。
如果可能的話,你絕對應該去的第一個選項。
但是,另一個問題是,在子控件的下拉列表中更改值時,該事件在父控件的Page_Load事件觸發後觸發,因此父控件始終將ViewState值視爲null。這適用於您的兩種解決方案。如果在父級的Page_Load之後激發子級下拉列表的SelectedIndexChanged,我無法讀取父級的值... – 2010-10-11 19:42:12
嘗試檢查父級控件的「PreRender」事件中下拉列表的值。這應該發生在子控件觸發的更改事件之後。 – Merrimack 2010-10-11 19:45:58
基本上,你只需要訂閱SelectedIndexChanged
事件和處理它。所選項目發生更改時會觸發該事件。請注意,您應該允許在下拉控件上進行自動回發,以確保在用戶更改下拉列表的值後立即觸發事件。
在ASPX文件:
< ASP:DropDownList的... OnSelectedIndexChanged = 「OnDropDownChanged」 > ... </ASP:DROPDOWNLIST >
正在創建的代碼隱藏控制的情況下,認購後創造這樣的控制:
dropDown.SelectedIndexChanged += OnDropDownChanged;
然後處理:
public void OnDropDownChanged(object sender, EventArgs e)
{
// alter the panel's visibility here; the drop down's value contains
// the selected item; note that you shoud use "(DropDownList)sender"
// to access it
}
編輯:另外,看看更詳細的example on MSDN。請注意,該事件在DropDownList
的祖先「ListControl」中聲明。
Ondrej,這就是我試過的。在IndexChanged我設置ViewState [「HideSubmit」] = 1。在父控制的Page_Load我取的ViewState的值,但其空值。 – 2010-10-11 19:56:53
正如我在更改下拉列表中的值時注意到的,第一個事件是在父級控件Page_Load中觸發的。在此範圍內,它查找的ViewState [「HideSubmit」]爲null,因爲SelectedIndexChanged事件尚未觸發,並且ViewState的值尚未設置。它在父級的Page_Load之後,它執行子控件下拉列表的SelectedIndexChanged。 – 2010-10-11 19:59:32
@Ashar Syed viewstate是**本地**到控件。在父控件中訂閱子控件的事件_or_將代碼放到周圍的ASPX代碼中 - 無論這些代碼是否適合您的實際設計。 – 2010-10-11 20:18:02
嘿謝謝!這工作:)。在你提供的解決方案之後,我做了一些修改。非常感謝你的幫助。我真的很感激! – 2010-10-11 21:04:29
不客氣!很高興我能幫到:) – TheGeekYouNeed 2010-10-11 21:25:07
我應該如何在EventArgs中傳遞一個值? – 2010-11-03 13:56:39