2009-05-13 105 views
1

我有一個嵌套的UserControl中,我想用一個LinkButtonOnCommand事件(這種控制是dynamicall另一個UserControl是動態由母版內的aspx頁面加載加載) 。LinkBut​​ton的嵌套用戶控件不觸發命令事件

必須將此按鈕添加到一些面板,所以我掛在OnLoad事件面板(它需要創建事件生命週期中的發射前):

protected void PatentAssignee_Load(object sender, EventArgs e) { 
    Label label = (Label)sender; 

    LinkButton link = new LinkButton(); 
    link.Text = name; 
    link.Command += Link_OnCommand; 
    link.CommandArgument = "argument"; 
    link.ID = "someID"; 

    label.Controls.Add(link) 
} 

protected void Link_OnCommand(object sender, CommandEventArgs e) { 
    Response.Write(e.CommandArgument); 
} 

但我可以」 t調用Link_OnCommand方法。還有一件事是我與這個問題有關的:UserControl在UpdatePanel中。我也試圖使鏈接觸發完全回發:

ScriptManager s = (ScriptManager)this.Page.Master.FindControl("__scriptManager"); 
s.RegisterPostBackControl(link); 

...但它不會改變太多,頁面重新加載完全,但沒有觸發事件。

編輯:正如意見中的要求,這裏有關於嵌套的詳細信息:

MasterPage 
    PlaceHolder 
    Page 
     UpdatePanel 
     UserControl1 
      FormView 
      PlaceHolder 
       UserControl2 
       LinkButton 

這意味着UserControl2動態加載。

+0

也許你可以包括有關包含動態鏈接按鈕控制,並在那裏被嵌套在頁面+母版頁一些更多的細節。 – 2009-05-13 11:41:21

+0

我添加了一些細節...希望這會有所幫助,但我覺得這將是複雜的;)! – Wookai 2009-05-13 12:03:41

回答

0

我記得也有這個問題。我沒有找到真正的問題,但我做了什麼,是在aspx標記中連接事件處理程序,它工作。

您也可以嘗試在頁面生命週期的某個早期階段掛鉤事件處理程序。

嘗試PreInit事件處理程序。

更多關於頁面生命週期here的信息。

+0

你的意思是在aspx而不是在服務器端創建LinkBut​​ton?我怎麼能動態地做到這一點,即CommandArgument依賴於一些數據? – Wookai 2009-05-13 09:30:39

+0

對不起,我的壞:)我以爲你只是動態地添加事件處理程序。我認爲動態創建控件應該在生命週期的早期完成。 – user31571 2009-05-13 11:20:42

+0

我也試圖在Init期間這樣做......但我認爲問題在別處,因爲我也嘗試手動添加LinkBut​​ton到我的頁面,並且事件也未被解僱! – Wookai 2009-05-13 12:28:22

2

層次結構中的一個控件缺少ID。設置ID,事件將觸發。這也會對AjaxControlToolkit造成混亂(確保每個擴展器都有ID或客戶端行爲通常無法加載)。

0

的AJAX,我想你可以創建一個可重用的類

public void registerUCAsyncPostBack(Page page, WebControl webcontrol, UserControl usercontrol){ 
      Control ControlAjaxNew = null; 
      if (webcontrol.GetType() == typeof(LinkButton)) 
      { 
       ControlAjaxNew = (LinkButton)usercontrol.FindControl(webcontrol.ID); 
      } 
      ScriptManager.GetCurrent(page).RegisterAsyncPostBackControl(ControlAjaxNew); 
     } 
相關問題