在網頁中我有我想要一個模板分配給它的中繼器:直放站項目模板載入
repeater1.ItemTemplate = Page.LoadTemplate("Template.ascx");
在這個模板,我有一個按鈕。我需要處理這些按鈕的Click事件。
是否有可能在網頁的代碼隱藏文件上處理,或者我必須爲Template.ascx創建代碼隱藏文件?
因爲如果爲Template.ascx創建代碼隱藏,我無法訪問在網頁上聲明的屬性。
在網頁中我有我想要一個模板分配給它的中繼器:直放站項目模板載入
repeater1.ItemTemplate = Page.LoadTemplate("Template.ascx");
在這個模板,我有一個按鈕。我需要處理這些按鈕的Click事件。
是否有可能在網頁的代碼隱藏文件上處理,或者我必須爲Template.ascx創建代碼隱藏文件?
因爲如果爲Template.ascx創建代碼隱藏,我無法訪問在網頁上聲明的屬性。
數據綁定控件使用一種稱爲event bubbling,讓孩子控制傳播的事件了控制層次技術。當點擊一個按鈕時,事件'起泡'到包含的中繼器控制。然後,您可以通過檢查RepeaterCommandEventArgs
的CommandName
屬性,然後執行相應的操作來確定哪個按鈕引發了該事件。
在用戶控件中。
<asp:Button ID="btnUpdate" runat="server" Text="Update" CommandName="Update" />
<asp:Button ID="btnDelete" runat="server" Text="Delete" CommandName="Delete" />
在您的父頁面中處理中繼器控件的ItemCommand事件。
protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
switch (e.CommandName)
{
case "Update":
//Add update logic here...
break;
case "Delete":
//Add delete logic here..
break;
}
}
只要有權訪問所需的控件,就可以訪問屬性。爲此,需要在RepeaterItem中搜索您的Repeater控件中的Button。
foreach (RepeaterItem item in Repeater1.Items)
(item.Controls[0].Controls[1] as Button).Click += new EventHandler(ClickHandler);
First Controls屬性是項目的容器,第二個是你的內容,這意味着你的情況是你的按鈕控件。
請注意,如果您的模板控件對您的期望頁面沒有任何操作,對於數據綁定的目的可能是,您應該允許它在您的模板頁面的代碼一側。
最好的運氣
我這樣做在我的網頁上的權利(不是在Template.ascx.cs)? – dani 2009-09-20 13:41:16
是的,你會這樣做,你把你的中繼器控制, 不在Template.ascx – Myra 2009-09-20 13:45:28