2009-11-26 116 views
3

我有一个简单的Web控件(TaskList),可以有从LinkBut​​ton继承的子项(Task),可以通过声明或编程方式添加。这工作正常,但我无法获得任务的onclick事件在我的代码中被解雇。代码..asp.net Web服务器控件与子控件,事件不触发

[ToolboxData("<{0}:TaskList runat=\"server\"> </{0}:TaskList>")] 
[ParseChildren(true)] 
[PersistChildren(false)] 
public class TaskList : System.Web.UI.Control 
{ 
    //[DefaultProperty("Text")] 
    public TaskList() 
    {} 

    private List<Task> _taskList = new List<Task>(); 

    private string _taskHeading = ""; 

    public string Heading 
    { 
     get 
     { 
      return this._taskHeading; 
     } 
     set 
     { 
      this._taskHeading = value; 
     } 
    } 

    [NotifyParentProperty(true)] 
    [PersistenceMode(PersistenceMode.InnerProperty)] 
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]  
    public List<Task> Tasks 
    { 
     get 
     { 
      return this._taskList; 
     } 

     set 
     { 
      this._taskList = value; 
     } 
    } 


    protected override void CreateChildControls() 
    { 
     foreach (Task task in this._taskList) 
      this.Controls.Add(task); 

     base.CreateChildControls(); 
    } 


    protected override void Render(HtmlTextWriter writer) 
    { 
     writer.Write("<h2>" + this._taskHeading + "</h2>"); 
     writer.Write("<div class='tasks_container'>"); 
     writer.Write("<div class='tasks_list'>"); 
     writer.Write("<ul>"); 
     foreach (Task task in this._taskList) 
     { 
       writer.Write("<li>"); 
       task.RenderControl(writer); 
       writer.Write("</li>"); 
     } 
     writer.Write("</ul>"); 
     writer.Write("</div>"); 
     writer.Write("</div>"); 
    } 
} 

public class Task : LinkButton 
{ 
    private string _key = ""; 

    public string Key 
    { 
     get 
     { 
      return this._key; 
     } 
     set 
     { 
      this._key = value; 
     } 
    } 

} 

标记:

<rf:TaskList runat="server" ID="tskList" Heading="Tasks"> 
    <Tasks> 
     <rf:Task Key="ba" ID="L1" Text="Helllo" OnClick="task1_Click" runat="server" /> 
    </Tasks> 
</rf:TaskList> 

onClick事件点击时(虽然回发发生时)task1_Click永远不会触发。

回答

8

TaskList需要实现INamingContainer才能正确路由每个任务的事件。

+0

我有点晚回答问题。仍然投票支持你的发现。 :) – Saar 2009-11-26 11:46:35

+0

干杯,我试图坚持任务列表跨越回传,你知道我是如何得到的对象,它是儿童进入视图状态? – bleeeah 2009-11-26 11:53:21

0

你有没有想过INamingContainer。

2

您也可以继承CompositeControl,它为您实现INamingContainer,而不是继承自Control。

相关问题