2009-05-13 74 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); 
     } 
相关问题