Contact   •   Products   •   Search

Rick Strahl's Web Log

Wind, waves, code and everything in between...
ASP.NET • C# • HTML5 • JavaScript • AngularJs

Hiding ASP.NET Controls from the Toolbox


I've often built custom ASP.NET controls that contain other custom child controls. For example, I have a DataBinder control that contains individual DataBindingItems which are based on Control. The problem is that by default these child controls show up on a control list. Here's what the Visual Studio auto-configured control list looks like for my controls:

The highlighted controls are child controls that shouldn't be there.

This is only an issue if the child items derive from System.Web.UI.Control. If you have child items derived directly from object or Component they don't show up. But if you have control derived children they need to be explicit hidden.

Now, there are lots of attributes you can use to customize how things show up in the control toolbox. But it's not documented very well, and for the longest time I couldn't find the right Attribute that actually hides a control from the toolbox.

The attribute is:

   [ToolboxData("<{0}:wwDataBindingItem runat=server />")]
   [ToolboxItem(false)]
   [Category("DataBinding")]
   [DefaultEvent("Validate")]
   [Description("An individual databinding item that allows you to bind a source binding source - a database field or Object property typically - to a target control property")]
   [Serializable]
   public class wwDataBindingItem : Control

ToolboxItem - I know, I know it seems so damn obvious now. But if you don't know what attribute to use, just try, try to find it . Apparently I'm not the only one. I asked Miguel Castro - the control man - and he too went  "...there's an attribute but hell if I know what it is".

I've looked for this attribute for a while. Eventually I found this by accident as I was poking around some control implementation code with Reflector in System.Web. I was poking around a DataListItem when I noticed the ToolboxItem attribute. Surely I'd seen this attribute before but somehow didn't connect the dots with a logical property to hide the control. Duh!!!

Control development for ASP.NET is one area that is horribly documented on MSDN and there's not really been a good book that I've found that addresses this topic at least not for ASP.NET 2.0. Oh it's all there - somewhere, but scatter over 100 different unrelated pages. It really would be nice if there was one page that lists all the attributes that can be applied to a control, all the attributes that can be applied to a property, to events etc.

Nikhil's book was kind of the standard for ASP.NET 1.1 control development:

Developing Microsoft ASP.NET Server Controls and Components
by Nikhil/Datye, V. Kothari, Nikhil Kothari, Vandana Datye
Microsoft Press (August 28, 2002)

Read more...

but there's nothing comparable (yet?) for 2.0...

Everytime I'm dealing with attributes on controls it feels like I'm poking around in the dark hoping to get lucky <s>. Oh well, better late than never...

Make Donation
Posted in ASP.NET  Control Development  


Feedback for this Post

 
# DotNetSlackers: Hiding ASP.NET Controls from the Toolbox
by DotNetSlackers Latest ASP.NET News June 22, 2007 @ 10:57pm
# re: Hiding ASP.NET Controls from the Toolbox
by DuncanS June 23, 2007 @ 5:50am
Hear hear, Rick. If it wasn't for Reflector I wouldn't know how we'd manage to do it at all. In fact, the sooner MS release the source to ASP.NET the better (see ScottGu's comment "I'm hoping/working to try and get the full ASP.NET framework source code published" http://weblogs.asp.net/scottgu/archive/2007/01/30/asp-net-ajax-1-0-source-code-released.aspx#1545238).
# re: Hiding ASP.NET Controls from the Toolbox
by Steve from Pleasant Hill June 23, 2007 @ 8:13am
Control development and source: that is what made Win32 development such an exciting pastime with Delphi! A number of excellent books were written on this topic (I have an excellent one by Ray Konopka), and since Borland supplied the source code to Delphi reading it solved many a late night problem.
# re: Hiding ASP.NET Controls from the Toolbox
by klaus_b June 23, 2007 @ 9:11am
Your idea with all the attributes on one place sounds very good. Maybe anybody (to glance at your site) host a Wiki like <a href="http://pinvoke.net/index.aspx">pinvoke.net</a> do it?
# re: Hiding ASP.NET Controls from the Toolbox
by Rick Strahl June 23, 2007 @ 2:14pm
Duncan - yeah source would be nice, but it's no replacement for documentation. Especially for things like Attributes which are difficult to discover even if you have source/Reflector to look at.
# re: Hiding ASP.NET Controls from the Toolbox
by Fred June 25, 2007 @ 8:47am
in fact I knew this attribute (I also found it looking for something else)

But I've never been able to make it working without producing a lot of aside problems eveywhere in my application. So for me it is buggy or a feature, does it?

but ok, I'll try it again on my current project....
# re: Hiding ASP.NET Controls from the Toolbox
by Rick Strahl June 25, 2007 @ 10:51am
What kind of side features? I actually had this set on a couple of older controls and it doesn't affect operation in any way. It's just a designer attribute so it shouldn't interfere with anything else.
# re: Hiding ASP.NET Controls from the Toolbox
by Chris July 26, 2007 @ 7:34am
Nice hint, it saved me a lot of time, thanks
# re: Hiding ASP.NET Controls from the Toolbox
by Imar Spaanjaars February 19, 2009 @ 1:40pm
Hi Rick,

It has taken me 1.5 years to get started, but I created the site you were wishing you had 1.5 years ago: http://www.dotnetattributes.com

The site contains all the attributes found in .NET 3.5, together with assembly references, namespaces, usage (like properties, classes, events, methods and so on), documentation and more. On top of that, it's open for the community so hopefully other developers will help enrich the data.

It's been mainly a pet project, based on your old wish here, but it was fun to do. For more info: http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=487

Hope you enjoy it, even though it's a bit late.... ;-)


Cheers,

Imar
 


West Wind  © Rick Strahl, West Wind Technologies, 2005 - 2014