I have a few labels on my page with a class of 'error', the rule for .error is:
<asp:Label ID="lblError" runat="server" CssClass="error" ></asp:Label>
lblError.Visible = True
The Visible property affects rendering of the entire element and is unrelated to the CSS visibility attribute. When false, Visible when prevent any HTML from being rendered at all.
To change the css attribute, you will need to do it manually. You can do this by either removing the "error" class from the element (via the CssClass property) or by setting a style="visibility: visible" attribute manually via the Attributes property (since the style attribute overrides a css class):
control.Attributes["style"] = "visibility: visible";