custom container control - wrapping child controls

Discussion in 'ASP .Net' started by gerry, Jul 23, 2008.

  1. gerry

    gerry Guest

    I am trying to create a custom container control that will only ever contain
    a specific type of control.
    At design time, when a control of a different type is added to the container
    I would like to wrap the control in the proper control type - which is also
    a container.

    At design time I want to be able to turn this :

    <my:container>
    <asp:textbox />
    </my:container>

    into this :

    <my:container>
    <my:wrapper>
    <asp:textbox />
    </my:wrapper>
    </my:container>

    It is no problem to detect what type of object is being added to the control
    and I can do the wrapping easy enough for the rendered control , but I can't
    see how to change the physical markup as displayed in the designer and
    stored in the .aspx file.

    Webparts does something similar but it looks like the designer source has
    not been made available.

    Anyone know how to do this or have any ideas on how this might be done ?

    Gerry
     
    gerry, Jul 23, 2008
    #1
    1. Advertising

  2. Hi Gerry,

    From your description, you're developing a custom server control which
    contains some inner controls, and you want to make some certain kind of
    nested subcontrols be wrapper with another control automatically at
    design-time, correct?

    I've performed some research on this. So far for nested controls, the
    custom control itself should be set as "ParseChildren" as false so that
    inner markup will be interpreted as control instances. I think you've also
    ready done this, correct? Generally, for design-time custoimzation, we
    have two tools:

    1. A custom control designer

    2. A custom control parser

    So far I only got some interfaces for customzing the displaying html from
    Control Designer , but not the inline markup of the control. Also,
    controlbuilder seems focus on the nested control's parsing and population
    at runtime. Is there are any particular requirement in your page or
    control that it will need such an wrapper element? Maybe we can also look
    for some other means on this.

    I'll do some further research on this and inform you if I get any new
    finding.

    Sincerely,

    Steven Cheng

    Microsoft MSDN Online Support Lead


    Delighting our customers is our #1 priority. We welcome your comments and
    suggestions about how we can improve the support we provide to you. Please
    feel free to let my manager know what you think of the level of service
    provided. You can send feedback directly to my manager at:
    .

    ==================================================
    Get notification to my posts through email? Please refer to
    http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
    ications.

    Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
    where an initial response from the community or a Microsoft Support
    Engineer within 1 business day is acceptable. Please note that each follow
    up response may take approximately 2 business days as the support
    professional working with you may need further investigation to reach the
    most efficient resolution. The offering is not appropriate for situations
    that require urgent, real-time or phone-based interactions or complex
    project analysis and dump analysis issues. Issues of this nature are best
    handled working with a dedicated Microsoft Support Engineer by contacting
    Microsoft Customer Support Services (CSS) at
    http://msdn.microsoft.com/subscriptions/support/default.aspx.
    ==================================================
    This posting is provided "AS IS" with no warranties, and confers no rights.
    --------------------
    >From: "gerry" <>
    >Subject: custom container control - wrapping child controls
    >Date: Wed, 23 Jul 2008 09:41:31 -0400


    >
    >I am trying to create a custom container control that will only ever

    contain
    >a specific type of control.
    >At design time, when a control of a different type is added to the

    container
    >I would like to wrap the control in the proper control type - which is

    also
    >a container.
    >
    >At design time I want to be able to turn this :
    >
    > <my:container>
    > <asp:textbox />
    > </my:container>
    >
    >into this :
    >
    > <my:container>
    > <my:wrapper>
    > <asp:textbox />
    > </my:wrapper>
    > </my:container>
    >
    >It is no problem to detect what type of object is being added to the

    control
    >and I can do the wrapping easy enough for the rendered control , but I

    can't
    >see how to change the physical markup as displayed in the designer and
    >stored in the .aspx file.
    >
    >Webparts does something similar but it looks like the designer source has
    >not been made available.
    >
    >Anyone know how to do this or have any ideas on how this might be done ?
    >
    >Gerry
    >
    >
    >
     
    Steven Cheng [MSFT], Jul 24, 2008
    #2
    1. Advertising

  3. Hi Gerry,

    How are you doing?

    Regarding on this issue, I've performed some further research and discussed
    with some other ASP.NET engineers.

    So far we can think of one way to achieve this, but I think it is total
    overkill. Whenever your template is persisted (when GetPersistenceContent()
    is called), you could examine your control tree and modify it to make sure
    it contains the container controls. You could then persist that control
    tree into text, then re-parse it into an ITemplate and set your property to
    that value. Then when ASP.NET persists your template it'll persist the
    modified template.

    Some scenarios that are a bit similar to this are that the MultiView
    control can only contain View controls. Similarly, WebPartZones can only
    contain WebParts. You might want to dig into their designer and runtime
    code to see how they handle this. I've used the reflector tool to inspect
    the code abit and find some code logic for gettting the current inner
    content of control. But may still need more effort on setting the content.

    Have you got any progress on your side?

    Sincerely,

    Steven Cheng

    Microsoft MSDN Online Support Lead


    Delighting our customers is our #1 priority. We welcome your comments and
    suggestions about how we can improve the support we provide to you. Please
    feel free to let my manager know what you think of the level of service
    provided. You can send feedback directly to my manager at:
    .

    ==================================================
    Get notification to my posts through email? Please refer to
    http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
    ications.


    ==================================================
    This posting is provided "AS IS" with no warranties, and confers no rights.
    --------------------
    >Content-Transfer-Encoding: 7bit
    >From: (Steven Cheng [MSFT])
    >Organization: Microsoft
    >Date: Thu, 24 Jul 2008 07:43:56 GMT
    >Subject: RE: custom container control - wrapping child controls


    >
    >Hi Gerry,
    >
    >From your description, you're developing a custom server control which
    >contains some inner controls, and you want to make some certain kind of
    >nested subcontrols be wrapper with another control automatically at
    >design-time, correct?
    >
    >I've performed some research on this. So far for nested controls, the
    >custom control itself should be set as "ParseChildren" as false so that
    >inner markup will be interpreted as control instances. I think you've also
    >ready done this, correct? Generally, for design-time custoimzation, we
    >have two tools:
    >
    >1. A custom control designer
    >
    >2. A custom control parser
    >
    >So far I only got some interfaces for customzing the displaying html from
    >Control Designer , but not the inline markup of the control. Also,
    >controlbuilder seems focus on the nested control's parsing and population
    >at runtime. Is there are any particular requirement in your page or
    >control that it will need such an wrapper element? Maybe we can also look
    >for some other means on this.
    >
    >I'll do some further research on this and inform you if I get any new
    >finding.
    >
    >Sincerely,
    >
    >Steven Cheng
    >
    >Microsoft MSDN Online Support Lead
    >
    >
    >Delighting our customers is our #1 priority. We welcome your comments and
    >suggestions about how we can improve the support we provide to you. Please
    >feel free to let my manager know what you think of the level of service
    >provided. You can send feedback directly to my manager at:
    >.
    >
    >==================================================
    >Get notification to my posts through email? Please refer to
    >http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#noti

    f
    >ications.
    >
    >Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
    >where an initial response from the community or a Microsoft Support
    >Engineer within 1 business day is acceptable. Please note that each follow
    >up response may take approximately 2 business days as the support
    >professional working with you may need further investigation to reach the
    >most efficient resolution. The offering is not appropriate for situations
    >that require urgent, real-time or phone-based interactions or complex
    >project analysis and dump analysis issues. Issues of this nature are best
    >handled working with a dedicated Microsoft Support Engineer by contacting
    >Microsoft Customer Support Services (CSS) at
    >http://msdn.microsoft.com/subscriptions/support/default.aspx.
    >==================================================
    >This posting is provided "AS IS" with no warranties, and confers no rights.
    >--------------------
    >>From: "gerry" <>
    >>Subject: custom container control - wrapping child controls
    >>Date: Wed, 23 Jul 2008 09:41:31 -0400

    >
    >>
    >>I am trying to create a custom container control that will only ever

    >contain
    >>a specific type of control.
    >>At design time, when a control of a different type is added to the

    >container
    >>I would like to wrap the control in the proper control type - which is

    >also
    >>a container.
    >>
    >>At design time I want to be able to turn this :
    >>
    >> <my:container>
    >> <asp:textbox />
    >> </my:container>
    >>
    >>into this :
    >>
    >> <my:container>
    >> <my:wrapper>
    >> <asp:textbox />
    >> </my:wrapper>
    >> </my:container>
    >>
    >>It is no problem to detect what type of object is being added to the

    >control
    >>and I can do the wrapping easy enough for the rendered control , but I

    >can't
    >>see how to change the physical markup as displayed in the designer and
    >>stored in the .aspx file.
    >>
    >>Webparts does something similar but it looks like the designer source has
    >>not been made available.
    >>
    >>Anyone know how to do this or have any ideas on how this might be done ?
    >>
    >>Gerry
    >>
    >>
    >>

    >
    >
     
    Steven Cheng [MSFT], Aug 4, 2008
    #3
  4. gerry

    gerry Guest

    thanks steven,

    I gave up on this for now - I just made it a requirement that the user must
    manually wrap the controls - along with a few other manual design time
    issues.

    I went the same route using reflector trying to trace through how webparts
    do it and even how list controls convert an edited list into embedded html
    but it didn't help much.

    If System.Design.pdb had been included in the framework source distro I
    think tracing through the process in the debugger would have helped
    immensely - but for whatever reason this was not included. I even tried
    recompiling System.Design.dll as exported from reflector - but it appears
    that reflector has some issues with its output that would make this a pretty
    daunting if not impossible task - the biggest problem being the generated
    code calling methods on objects in other assemblies marked as internal. IMO
    the framework contains WAY too many internal elements especially trivial
    elements - but I digress.

    I will dig into this again at a later time - with the extolling of vs
    extensibility I would have expected all of the design time capabilitied to
    be fully documented and base functionality to be publicly available for use
    as base classes rather than undocumented and hidden away in 'internal' code.
    Hopefully this stuff is available through vsip or some such and I just
    haven't stumbled my way across it yet.

    I haven't found any in depth books on the subject of vs design time
    support - can you recommend any ?







    "Steven Cheng [MSFT]" <> wrote in message
    news:...
    > Hi Gerry,
    >
    > How are you doing?
    >
    > Regarding on this issue, I've performed some further research and
    > discussed
    > with some other ASP.NET engineers.
    >
    > So far we can think of one way to achieve this, but I think it is total
    > overkill. Whenever your template is persisted (when
    > GetPersistenceContent()
    > is called), you could examine your control tree and modify it to make sure
    > it contains the container controls. You could then persist that control
    > tree into text, then re-parse it into an ITemplate and set your property
    > to
    > that value. Then when ASP.NET persists your template it'll persist the
    > modified template.
    >
    > Some scenarios that are a bit similar to this are that the MultiView
    > control can only contain View controls. Similarly, WebPartZones can only
    > contain WebParts. You might want to dig into their designer and runtime
    > code to see how they handle this. I've used the reflector tool to inspect
    > the code abit and find some code logic for gettting the current inner
    > content of control. But may still need more effort on setting the content.
    >
    > Have you got any progress on your side?
    >
    > Sincerely,
    >
    > Steven Cheng
    >
    > Microsoft MSDN Online Support Lead
    >
    >
    > Delighting our customers is our #1 priority. We welcome your comments and
    > suggestions about how we can improve the support we provide to you. Please
    > feel free to let my manager know what you think of the level of service
    > provided. You can send feedback directly to my manager at:
    > .
    >
    > ==================================================
    > Get notification to my posts through email? Please refer to
    > http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
    > ications.
    >
    >
    > ==================================================
    > This posting is provided "AS IS" with no warranties, and confers no
    > rights.
    > --------------------
    >>Content-Transfer-Encoding: 7bit
    >>From: (Steven Cheng [MSFT])
    >>Organization: Microsoft
    >>Date: Thu, 24 Jul 2008 07:43:56 GMT
    >>Subject: RE: custom container control - wrapping child controls

    >
    >>
    >>Hi Gerry,
    >>
    >>From your description, you're developing a custom server control which
    >>contains some inner controls, and you want to make some certain kind of
    >>nested subcontrols be wrapper with another control automatically at
    >>design-time, correct?
    >>
    >>I've performed some research on this. So far for nested controls, the
    >>custom control itself should be set as "ParseChildren" as false so that
    >>inner markup will be interpreted as control instances. I think you've also
    >>ready done this, correct? Generally, for design-time custoimzation, we
    >>have two tools:
    >>
    >>1. A custom control designer
    >>
    >>2. A custom control parser
    >>
    >>So far I only got some interfaces for customzing the displaying html from
    >>Control Designer , but not the inline markup of the control. Also,
    >>controlbuilder seems focus on the nested control's parsing and population
    >>at runtime. Is there are any particular requirement in your page or
    >>control that it will need such an wrapper element? Maybe we can also look
    >>for some other means on this.
    >>
    >>I'll do some further research on this and inform you if I get any new
    >>finding.
    >>
    >>Sincerely,
    >>
    >>Steven Cheng
    >>
    >>Microsoft MSDN Online Support Lead
    >>
    >>
    >>Delighting our customers is our #1 priority. We welcome your comments and
    >>suggestions about how we can improve the support we provide to you. Please
    >>feel free to let my manager know what you think of the level of service
    >>provided. You can send feedback directly to my manager at:
    >>.
    >>
    >>==================================================
    >>Get notification to my posts through email? Please refer to
    >>http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#noti

    > f
    >>ications.
    >>
    >>Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
    >>where an initial response from the community or a Microsoft Support
    >>Engineer within 1 business day is acceptable. Please note that each follow
    >>up response may take approximately 2 business days as the support
    >>professional working with you may need further investigation to reach the
    >>most efficient resolution. The offering is not appropriate for situations
    >>that require urgent, real-time or phone-based interactions or complex
    >>project analysis and dump analysis issues. Issues of this nature are best
    >>handled working with a dedicated Microsoft Support Engineer by contacting
    >>Microsoft Customer Support Services (CSS) at
    >>http://msdn.microsoft.com/subscriptions/support/default.aspx.
    >>==================================================
    >>This posting is provided "AS IS" with no warranties, and confers no
    >>rights.
    >>--------------------
    >>>From: "gerry" <>
    >>>Subject: custom container control - wrapping child controls
    >>>Date: Wed, 23 Jul 2008 09:41:31 -0400

    >>
    >>>
    >>>I am trying to create a custom container control that will only ever

    >>contain
    >>>a specific type of control.
    >>>At design time, when a control of a different type is added to the

    >>container
    >>>I would like to wrap the control in the proper control type - which is

    >>also
    >>>a container.
    >>>
    >>>At design time I want to be able to turn this :
    >>>
    >>> <my:container>
    >>> <asp:textbox />
    >>> </my:container>
    >>>
    >>>into this :
    >>>
    >>> <my:container>
    >>> <my:wrapper>
    >>> <asp:textbox />
    >>> </my:wrapper>
    >>> </my:container>
    >>>
    >>>It is no problem to detect what type of object is being added to the

    >>control
    >>>and I can do the wrapping easy enough for the rendered control , but I

    >>can't
    >>>see how to change the physical markup as displayed in the designer and
    >>>stored in the .aspx file.
    >>>
    >>>Webparts does something similar but it looks like the designer source has
    >>>not been made available.
    >>>
    >>>Anyone know how to do this or have any ideas on how this might be done ?
    >>>
    >>>Gerry
    >>>
    >>>
    >>>

    >>
    >>

    >
     
    gerry, Aug 5, 2008
    #4
  5. Thanks for your reply Gerry,

    Yes, for temporary solution, perform runtime checking and control wrapper
    will be much easier.

    Also, I agree that for ASP.NET custom control programming, the resource for
    design-time part is still quite limited and I do have received such
    feedback before. So far the MSDN contains some basic design-time
    programming reference:

    http://msdn.microsoft.com/en-us/library/w4hk59ha(VS.85).aspx

    For other books, there are some books written by some MVP or other guys:

    #Data Source Controls (Part 5 - Design Time Functionality)
    http://www.nikhilk.net/DataSourceControlsDesignTime.aspx

    And I would recommemd you some MS dev engineer's blog since there are some
    useful tech articles and information there. Actually, sometimes I also
    discuss with some of them for ideas of design-time issues:

    http://weblogs.asp.net/leftslipper/archive/2007/02/15/attributes-to-consider
    -applying-when-writing-a-custom-control.aspx

    Sincerely,

    Steven Cheng

    Microsoft MSDN Online Support Lead


    Delighting our customers is our #1 priority. We welcome your comments and
    suggestions about how we can improve the support we provide to you. Please
    feel free to let my manager know what you think of the level of service
    provided. You can send feedback directly to my manager at:
    .

    ==================================================
    Get notification to my posts through email? Please refer to
    http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
    ications.

    ==================================================
    This posting is provided "AS IS" with no warranties, and confers no
    rights.--------------------
    >From: "gerry" <>
    >References: <>

    <>
    <>
    >Subject: Re: custom container control - wrapping child controls
    >Date: Tue, 5 Aug 2008 09:01:21 -0400


    >thanks steven,
    >
    >I gave up on this for now - I just made it a requirement that the user

    must
    >manually wrap the controls - along with a few other manual design time
    >issues.
    >
    >I went the same route using reflector trying to trace through how webparts
    >do it and even how list controls convert an edited list into embedded html
    >but it didn't help much.
    >
    >If System.Design.pdb had been included in the framework source distro I
    >think tracing through the process in the debugger would have helped
    >immensely - but for whatever reason this was not included. I even tried
    >recompiling System.Design.dll as exported from reflector - but it appears
    >that reflector has some issues with its output that would make this a

    pretty
    >daunting if not impossible task - the biggest problem being the generated
    >code calling methods on objects in other assemblies marked as internal.

    IMO
    >the framework contains WAY too many internal elements especially trivial
    >elements - but I digress.
    >
    >I will dig into this again at a later time - with the extolling of vs
    >extensibility I would have expected all of the design time capabilitied to
    >be fully documented and base functionality to be publicly available for

    use
    >as base classes rather than undocumented and hidden away in 'internal'

    code.
    >Hopefully this stuff is available through vsip or some such and I just
    >haven't stumbled my way across it yet.
    >
    >I haven't found any in depth books on the subject of vs design time
    >support - can you recommend any ?
    >
    >
    >
     
    Steven Cheng [MSFT], Aug 6, 2008
    #5
  6. gerry

    gerry Guest

    Thanks Steven.

    "Steven Cheng [MSFT]" <> wrote in message
    news:...
    > Thanks for your reply Gerry,
    >
    > Yes, for temporary solution, perform runtime checking and control wrapper
    > will be much easier.
    >
    > Also, I agree that for ASP.NET custom control programming, the resource
    > for
    > design-time part is still quite limited and I do have received such
    > feedback before. So far the MSDN contains some basic design-time
    > programming reference:
    >
    > http://msdn.microsoft.com/en-us/library/w4hk59ha(VS.85).aspx
    >
    > For other books, there are some books written by some MVP or other guys:
    >
    > #Data Source Controls (Part 5 - Design Time Functionality)
    > http://www.nikhilk.net/DataSourceControlsDesignTime.aspx
    >
    > And I would recommemd you some MS dev engineer's blog since there are some
    > useful tech articles and information there. Actually, sometimes I also
    > discuss with some of them for ideas of design-time issues:
    >
    > http://weblogs.asp.net/leftslipper/archive/2007/02/15/attributes-to-consider
    > -applying-when-writing-a-custom-control.aspx
    >
    > Sincerely,
    >
    > Steven Cheng
    >
    > Microsoft MSDN Online Support Lead
    >
    >
    > Delighting our customers is our #1 priority. We welcome your comments and
    > suggestions about how we can improve the support we provide to you. Please
    > feel free to let my manager know what you think of the level of service
    > provided. You can send feedback directly to my manager at:
    > .
    >
    > ==================================================
    > Get notification to my posts through email? Please refer to
    > http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
    > ications.
    >
    > ==================================================
    > This posting is provided "AS IS" with no warranties, and confers no
    > rights.--------------------
    >>From: "gerry" <>
    >>References: <>

    > <>
    > <>
    >>Subject: Re: custom container control - wrapping child controls
    >>Date: Tue, 5 Aug 2008 09:01:21 -0400

    >
    >>thanks steven,
    >>
    >>I gave up on this for now - I just made it a requirement that the user

    > must
    >>manually wrap the controls - along with a few other manual design time
    >>issues.
    >>
    >>I went the same route using reflector trying to trace through how webparts
    >>do it and even how list controls convert an edited list into embedded html
    >>but it didn't help much.
    >>
    >>If System.Design.pdb had been included in the framework source distro I
    >>think tracing through the process in the debugger would have helped
    >>immensely - but for whatever reason this was not included. I even tried
    >>recompiling System.Design.dll as exported from reflector - but it appears
    >>that reflector has some issues with its output that would make this a

    > pretty
    >>daunting if not impossible task - the biggest problem being the generated
    >>code calling methods on objects in other assemblies marked as internal.

    > IMO
    >>the framework contains WAY too many internal elements especially trivial
    >>elements - but I digress.
    >>
    >>I will dig into this again at a later time - with the extolling of vs
    >>extensibility I would have expected all of the design time capabilitied to
    >>be fully documented and base functionality to be publicly available for

    > use
    >>as base classes rather than undocumented and hidden away in 'internal'

    > code.
    >>Hopefully this stuff is available through vsip or some such and I just
    >>haven't stumbled my way across it yet.
    >>
    >>I haven't found any in depth books on the subject of vs design time
    >>support - can you recommend any ?
    >>
    >>
    >>

    >
     
    gerry, Aug 6, 2008
    #6
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Chris Newby
    Replies:
    1
    Views:
    478
    Vaibhav
    Feb 25, 2005
  2. Jeff Rodriguez
    Replies:
    23
    Views:
    1,130
    David Schwartz
    Dec 9, 2003
  3. Chad Scharf
    Replies:
    3
    Views:
    886
    Chad Scharf
    Oct 18, 2007
  4. gerry
    Replies:
    0
    Views:
    390
    gerry
    Jul 22, 2008
  5. Replies:
    0
    Views:
    207
Loading...

Share This Page