J'ai un simple contrôle web (TaskList) qui peut avoir des enfants (tâche) qui héritent de LinkButton, qui peuvent être ajoutés de manière déclarative ou programmée. Cela fonctionne bien, mais je n'arrive pas à déclencher l'événement onclick d'une tâche dans mon code. Le code ..asp.net Contrôle du serveur Web avec contrôles enfants, l'événement ne se déclenche pas
[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;
}
}
}
Markup:
<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>
L'événement onclick task1_Click ne se déclenche lorsque vous cliquez dessus (bien qu'un postback se produit). TaskList nécessaire pour implémenter INamingContainer pour router correctement les événements de chaque tâche.
Je suis un peu en retard pour poster une réponse. Encore un vote pour votre savoir. :) – Saar
À la vôtre, j'essaie de maintenir la TaskList à travers les publications, savez-vous comment j'obtiens l'objet et ses enfants dans viewstate? – bleeeah