Wieder mal die Templates

Written on March 12, 2004

Durch ein Posting in der ASP.NET-Mailingliste bin ich auf ein weiteres Misfeature in den bereits häufiger angesprochenen Templates gestossen:

Will man in der CreateChilds-Methode Controls (z.B. Label) dynamisch hinzufügen:

protected override void CreateChildControls()
{
// check if the name was set
if((null == this.Title)||(""==this.Title))
this.Title = "No Title";
Label lbl = new Label();
lbl.Text = "Hallo";
this.Controls.Add(lbl);
// insert the main content body if available
if( null != this.Body )
this.Body.InstantiateIn( bodycontainer );
}

so erhält man die folgende Parser-Fehlermeldung:

Die Steuerelementeauflistung kann nicht geändert werden, da das Steuerelement Codeblöcke enthält (z.B. <% ... %>).

Grund dafür ist folgender Tag in der Template.ascx:

Die Lösung besteht darin, diesen Tag durch folgende Zeile zu ersetzen:

sowie in der CodeBehind folgenden Code einzufügen:

protected System.Web.UI.WebControls.Literal ltlTitle;

protected override void CreateChildControls()
{
// check if the name was set
if((null == this.Title)||(""==this.Title))
this.Title = "No Title";
ltlTitle.Text = this.Title; // dem Literal den Titel zuweisen
Label lbl = new Label();
lbl.Text = "Hallo";
this.Controls.Add(lbl);
// insert the main content body if available
if( null != this.Body )
this.Body.InstantiateIn( bodycontainer );
}