Custom control that can contain other controls

N

Nick Gilbert

Hi,

How can I create a custom control which will wrap its content in a
header and footer?

eg:

Is it possible to create a .NET user control which can surround other
controls? eg:
<my:RoundedCornerBox id=foo runat=server>
Content1
Content2
</my:RoundedCornerBox>

renders as:

<div class=foobar>
Content.
Content.
</div>

I don't think this is possible with Web User Controls.

Thanks,

Nick...
PS the above example is vastly simplified but demonstrates the concept
what I need to do.
 
N

Nick Gilbert

It's a usercontrol originally developed by Scott Mitchell which I modified
to produce XHTML-compliant markup.

Thanks for the link.

I'm actually quoted on that page "Special thanks to Nick Gilbert for
helping..."

You would think I would remember wouldn't you?! I must have had too
much alcohol over Christmas! :)

Thanks,

Nick...
 
M

Mark Rae

Thanks for the link.

I'm actually quoted on that page "Special thanks to Nick Gilbert for
helping..."

You would think I would remember wouldn't you?! I must have had too much
alcohol over Christmas! :)

ROTFLMAO!!!
 
N

Nick Gilbert

I've just remembered why I don't use that code. You can't specify the
corner images and so are restricted to very basic designs. Also it
renders using tables - which makes for very heavy HTML if you have lots
of boxes on one page. But hopefully I can use the code to find out how
to write my "wrapper" control that will mark things up as a box with
rounded corners.

Currently, my code to make a rounded corner box doesn't use any tables
and the amount of HTML per box is very small.

Nick...
 
M

Mark Rae

You can't specify the corner images and so are restricted to very basic
designs.

You don't need to specify the images - it creates them dynamically (if they
don't already exist) according to the settings you choose - it's totally
flexible in that way...
Also it renders using tables - which makes for very heavy HTML if you have
lots of boxes on one page.

I have to say that I don't find it heavy at all...
Currently, my code to make a rounded corner box doesn't use any tables and
the amount of HTML per box is very small.

Well, I'd certainly be interested to see that...

I believe rounded corners is something being considered for the next
standardisation of CSS...
 
S

Steven Cheng[MSFT]

Hello Nick,

I'm not quite sure about what your wrap control will look like(for UI
appearance), however, for building such a custom control through available
ASP.NET control development features, here are some suggestions:

1. I think ascx usercontrol is not suitable here, and a custom web server
control is preferred.

2. As what you need is the following like control, the control itself can
contain discretionary child content(normal html or other server controls):

=========
<my:RoundedCornerBox id=foo runat=server>
Content1
Content2
</my:RoundedCornerBox>
===========

and after rendering, all the child content will be also wrapped in
container html set such as

===========
<div>
child content rendering...
</div>
===========

Thus, I think a good choice is to use ASP.NET custom template control(just
like the LoginView control...) which can let you define a custom inner
template, and those child content in the template will always be rendered
within the container(you determined in your toplevel control's control
creation code logic).

Here are some MSDN reference and web article introduce developing custom
template control.

#Building Templated Custom ASP.NET Server Controls
http://msdn2.microsoft.com/en-us/library/aa478964.aspx

#Creating a Templated Control
http://www.samspublishing.com/articles/article.asp?p=101748&seqNum=7&rl=1

For your scenario, you can define a Template property for your custom wrap
control(which use to contain any content you want to include), then in your
control's main control creation codelogic, you first create the outside
wrapper html content(<div>, <table> or ...) and add the template instanced
sub controls into the outside wrapper. Also, you can use multi-templates if
necessary, it's quite flexible.

Hope this helps.

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead



==================================================

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.
 
N

Nick Gilbert

Hi,

I have managed to do what I want by making my own control like this:

[DefaultProperty("Text"), PersistChildren(true), ParseChildren(false)]
public class RoundedCornerBox : System.Web.UI.WebControls.WebControl {
public override void RenderBeginTag(HtmlTextWriter writer) {
writer.Write("(START HTML)");
}

public override void RenderEndTag(HtmlTextWriter writer) {
writer.Write("(END HTML)");
}
}


I'm not sure if this is the best way of doing it, but it seems to work OK.

Nick...
 
S

Steven Cheng[MSFT]

Thanks for your followup Nick,

Glad that you've found a solution. BTW, if you have interests try the
template control approach and if there is anything else we can help, please
feel free to post here.

Have a good day!

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead


This posting is provided "AS IS" with no warranties, and confers no rights.
 

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. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,051
Latest member
CarleyMcCr

Latest Threads

Top