【问题标题】:asp.net Web server control with child controls, event not firing带有子控件的asp.net Web服务器控件,事件未触发
【发布时间】:2010-12-20 15:45:17
【问题描述】:

我有一个简单的 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(尽管会发生回发)。

【问题讨论】:

    标签: asp.net custom-server-controls


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您是否考虑过 INamingContainer。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 我发布答案有点晚了。仍然为您的发现投票。 :)
        • 干杯,我正在尝试在回发中保留 TaskList,你知道我如何让对象及其子对象进入视图状态吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-06
        • 1970-01-01
        • 1970-01-01
        • 2010-10-08
        • 1970-01-01
        相关资源
        最近更新 更多