2009-09-20 54 views
0

在網頁中我有我想要一個模板分配給它的中繼器:直放站項目模板載入

repeater1.ItemTemplate = Page.LoadTemplate("Template.ascx"); 

在這個模板,我有一個按鈕。我需要處理這些按鈕的Click事件。
是否有可能在網頁的代碼隱藏文件上處理,或者我必須爲Template.ascx創建代碼隱藏文件?

因爲如果爲Template.ascx創建代碼隱藏,我無法訪問在網頁上聲明的屬性。

回答

0

數據綁定控件使用一種稱爲event bubbling,讓孩子控制傳播的事件了控制層次技術。當點擊一個按鈕時,事件'起泡'到包含的中繼器控制。然後,您可以通過檢查RepeaterCommandEventArgsCommandName屬性,然後執行相應的操作來確定哪個按鈕引發了該事件。

在用戶控件中。

<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; 
    } 
} 
0

只要有權訪問所需的控件,就可以訪問屬性。爲此,需要在RepeaterItem中搜索您的Repeater控件中的Button。

foreach (RepeaterItem item in Repeater1.Items) 
    (item.Controls[0].Controls[1] as Button).Click += new EventHandler(ClickHandler); 

First Controls屬性是項目的容器,第二個是你的內容,這意味着你的情況是你的按鈕控件。

請注意,如果您的模板控件對您的期望頁面沒有任何操作,對於數據綁定的目的可能是,您應該允許它在您的模板頁面的代碼一側。

最好的運氣

+0

我這樣做在我的網頁上的權利(不是在Template.ascx.cs)? – dani 2009-09-20 13:41:16

+0

是的,你會這樣做,你把你的中繼器控制, 不在Template.ascx – Myra 2009-09-20 13:45:28