2009-11-26 143 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。

相關問題