ASP.Net web表單,.NET 2.0如何在頁面加載時向ASP.NET控件添加事件?
我有一個兩難的問題。我有了一個自定義的控件的aspx頁面:
<def:CustomControl ID="customID" runat="server" />
,如果某些條件得到滿足的自定義控件可以多次添加到ASPX頁面:
<asp:Repeater runat="server" ID="options" OnItemDataBound="options_OnItemDataBound">
<HeaderTemplate>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
</HeaderTemplate>
<ItemTemplate>
<td>
<span>
<asp:Label runat="server" ID="optionName">
</asp:Label>
<asp:DropDownList runat="server" ID="optionValues" CssClass="PartOption" >
</asp:DropDownList>
</span>
</td>
</ItemTemplate>
<FooterTemplate>
</tr>
</table>
</FooterTemplate>
</asp:Repeater>
在代碼中的aspx的背後頁面,我想追加一個事件(OnSelectedItemChange)到下拉控件,它實際上並不在ASPX頁面上(尚)。然而,當我嘗試做一些像以下代碼背後:
foreach(Control eachControl in customID.Controls) {
if (eachControl.HasControls) {
Control DdControl = eachControl.FindControl("optionValues"); //always null
if (DdControl != null && DdControl is typeOf(DropDownList)) {
DdControl = DdControl as DropDownlist; //I might have the syntax wrong
//here, but you get the point.
//add event to control.
}
}
}
但所有這一切eachControl已經是一箇中繼器,它顯示了其childcontrol計數爲0。因此,當它到達FindControl方法,它總是返回null。
問題 所以我試圖做的是一個事件(OnSelectedItemChange)添加到中繼器內部的下拉列表控制(也就是當條件滿足的是被添加到頁面中的自定義控制)。在下拉菜單中進行選擇時,我希望它觸發Event方法。
如何,我不是:
A)找到一個方法,如果頁面上存在的下拉列表控件添加事件?
OR
B)的一種方法,以便能夠身後調用代碼的方法,並從所有的下降通過選擇下拉列表(因爲自定義控件可以增加一次創建多個下拉菜單嗎?
注意我沒有在我面前的代碼,所以如果我有一些語法錯誤,請忽略我也知道ID是唯一的,所以這也被認爲是我的邏輯問題。當它呈現這些時,ID的可能會被asp名稱慣例所破壞,我認爲我必須找到解決辦法。
首先用哪種方法試着執行上面的代碼? 其次爲什麼不在自定義控件上創建事件。這可能不是唯一的一次有人想要subsribe到selectchanged事件 – 2011-02-24 12:34:42
你是指DropDownList的'SelectedIndexChanged'事件嗎? – 2011-02-24 12:35:08
@LordCover - 是的。 @Rune FS - 我不確定我是否遵守。我更新了上述自定義控件。但是由於自定義控件的代碼位於單獨的頁面上,因此如何將它放在ASPX頁面上的控件上,影響嵌入在自定義控件Repeater中的下拉列表控件? –
pghtech
2011-02-24 14:39:05