ParseChildren(false) not adding sub objects in the designer

Discussion in 'ASP .Net Building Controls' started by Sam Fields, Jan 28, 2004.

  1. Sam Fields

    Sam Fields Guest

    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 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 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.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" %>
    <form id="default" method="post" runat="server">
    <cc:test id="content" runat="server">
    <asp:Label id="mylabel" text="MyLabel" Runat="server"></asp:Label>
    Sam Fields, Jan 28, 2004
    1. Advertisements

  2. Sam Fields

    Sam Fields Guest

    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
    Sam Fields, Jan 28, 2004
    1. Advertisements

  3. Sam Fields

    RadekP Guest


    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.



    RadekP, Jan 28, 2004
  4. Sam Fields

    Sam Fields Guest

    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

    Sam Fields, Jan 29, 2004
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.