all groups > asp.net building controls > january 2004 >
You're in the

asp.net building controls

group:

ParseChildren(false) not adding sub objects in the designer


ParseChildren(false) not adding sub objects in the designer Sam Fields
1/28/2004 12:25:34 PM
asp.net building controls: I have been wrestling with this code for about 2 weeks now. My goal is to
create a table for formatting purposes. I want to standardize it as a
webcontrol. I want all of the content to persist as top-level controls so
that they are visible to the asp.net designer -- PersistChildren(true). The
code works fine for run-time, but will not call AddParsedSubObject for
design-time. How do I get my child controls to display properly in the
asp.net designer?

Thanks to any who can help!
Sam Fields


Here is a sample of what I am trying to build in its simplest format:

c# code:
namespace testbed
{
[ParseChildren(false), PersistChildren(true)]
[ToolboxData("<{0}:test runat=server></{0}:test>")]
public class test : Table
{
private TableCell innercell = new TableCell();
public test()
{
this.Rows.Add(new TableRow());
this.Rows[0].Cells.Add(new TableCell());
this.Rows[0].Cells[0].Text = "Header";

this.Rows.Add(new TableRow());
this.Rows[1].Cells.Add(innercell);

this.Rows.Add(new TableRow());
this.Rows[2].Cells.Add(new TableCell());
this.Rows[2].Cells[0].Text = "Footer";
}

protected override void AddParsedSubObject(object obj)
{
innercell.Controls.Add((Control) obj);
this.ChildControlsCreated = false;
}
}
}

..aspx page:
<%@ Register TagPrefix="cc" Namespace="testbed" Assembly="testbed" %>
<%@ Page language="c#" Codebehind="default.aspx.cs" AutoEventWireup="false"
Inherits="testbed._default" %>
<HTML>
<HEAD>
<title>default</title>
</HEAD>
<body>
<form id="default" method="post" runat="server">
<cc:test id="content" runat="server">
MyContent
<asp:Label id="mylabel" text="MyLabel" Runat="server"></asp:Label>
</cc:test>
</form>
</body>
</HTML>

Re: ParseChildren(false) not adding sub objects in the designer Sam Fields
1/28/2004 2:03:58 PM
More information:
If the inner content is literal, the AddParsedSubObject override is adding
the "LiteralControl" at design time. It is only when the <asp:Label> is
added to the inner content that the design time rendering fails.

Any help would be greatly appreciated!
Thanks, Sam Fields

[quoted text, click to view]

Re: ParseChildren(false) not adding sub objects in the designer RadekP
1/28/2004 2:37:41 PM
Sam..

I'm afraid you are never going to achieve design time rendering of children
controls persisted with [ParseChildren(false)] [PersistChildren(true)].
First of - AddParsedSubObject method runs only at run-time. ControlBuilder's
are the ones executed at parse time - they generate a tree similar to
control tree but containing instances of ControlBuilders. Nevertheless I
would recommend to implement ITemplate interface and
TemplatedControlDesigner for control.

Regards

Radek

[quoted text, click to view]

Re: ParseChildren(false) not adding sub objects in the designer Sam Fields
1/29/2004 7:47:57 AM
I will give that a try. It doesn't make sense, though, that a
LiteralControl is added to the inner cell at design time if the literal is
the only contained information. Why, then, does this happen if
AddParsedSubObject is a run-time only call?

Thanks for your response! Sam

[quoted text, click to view]

AddThis Social Bookmark Button