3

我有一个简单的 Web 控件(TaskList),它可以有从 LinkBut​​ton 继承的子项(Task),可以以声明方式或编程方式添加。这工作正常,但我无法在我的代码中触发任务的 onclick 事件。编码 ..

    [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 在单击时永远不会触发(尽管会发生回发)。

4

3 回答 3

8

TaskList 需要实现 INamingContainer 以正确路由每个 Task 的事件。

于 2009-11-26T11:43:43.280 回答
2

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

于 2010-03-30T19:20:12.483 回答
0

你有没有想过 INamingContainer。

于 2009-11-26T11:44:52.537 回答