Phil picks up ScottW's Quick Tips for ASP.NET and beats him around over his comment to never use the <asp:label> control, but misses the weirdest thing about <asp:label>, it has two faces; due to backwards compatibility for ASP.NET 1.0 and 1.1.

In previous versions of ASP.NET the label control was used to dump text into your page, surrounded by a <span> tag. In 2.0 it finally became equivalent to the <label>, but that's hidden away. If you look at the MSDN documentation the control is described thus;

Represents a label control, which displays text on a Web page.

which isn't what Phil describes, it describes the pre 2.0 behaviour.

The thing is the control is schizophrenic, it changes what it renders depending on if you set the Associated ControlId property or not. If you set the property you make it gets rendered as a <label> control if you don't it renders as text, surrounded by a <span> tag (as any WebControl which doesn't override TagKey does).

So, as I have a large ego, I say ignore both their advice, and I would rephrase it to

Never use the ASP.NET Label control without setting the AssociatedControlId property.

That should satisfy the both of them.