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

  3. Sam Fields

    RadekP Guest

    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

     
    RadekP, Jan 28, 2004
    #3
  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
    #4
    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.