Manage Learn to apply best practices and optimize your operations.

Declare a simple custom control

What they do, and how to declare them.

.NET Developer Tip
(Receive this column in your inbox,
click Edit your Profile to subscribe.)

Declare a simple custom control
Rob Howard and Steven Smith

One of the most powerful features of ASP.NET is its support for custom server controls and components. ASP.NET ships with dozens of built-in controls, and developers can easily extend these controls or write their own controls from scratch. This tip, which is excerpted from InformIT, talks about custom controls in, and offers an example of how to declare one.

One of the most powerful features of ASP.NET is its support for custom server controls and components. ASP.NET ships with dozens of built-in controls, and developers can easily extend these controls or write their own controls from scratch. Server controls can be used to encapsulate complex user interface logic or business rules, and can benefit from design-time support like drag-and-drop and toolbox support and property builders. Custom controls pick up where User Controls leave off, providing greater flexibility, reusability, and a better design time experience, but with some added complexity.

This example demonstrates how easy it is to create custom controls in ASP.NET, especially when compared to COM components. You simply create a class that inherits from System.Web.UI.Control or System.Web.UI.WebControls.WebControl and give it whatever properties and methods you need. In Visual Studio .NET, you would normally do this by creating a new Web Control Library project. You override its Render() method to control its output, and you have a very simple yet powerful tool for encapsulating and reusing user interface logic.

The Recipe0301vb class is as follows:

Imports System.ComponentModel
Imports System.Web.UI
Namespace AspNetCookbook

  <DefaultProperty("Text"), ToolboxData("<{0}:Recipe0301vb 
    runat=server></{0}:Recipe0301vb>")> Public Class Recipe0301vb
    Inherits System.Web.UI.WebControls.WebControl

    Dim _text As String

    <Bindable(True), Category("Appearance"), 
    DefaultValue("")> Property [Text]() As String
        Return _text
      End Get

      Set(ByVal Value As String)
        _text = Value
      End Set
    End Property

    Protected Overrides Sub Render(
      ByVal output As System.Web.UI.HtmlTextWriter)
    End Sub

  End Class
End Namespace

To reference a custom control on a Web Form, you need to add a Register directive to the page, and specify three parameters. The TagPrefix is used for all controls from this namespace and assembly when they are declared on the page, and can be anything but asp, which is reserved for the built-in Web Controls that ASP.NET provides. Next, the namespace in which the controls reside must be specified. Finally, the name of the assembly, without any path information or the .DLL extension, is specified for the Assembly parameter. An example of this follows:

<%@ Page language="VB" %>
<%@ Register TagPrefix="AspNetCookbook" Namespace="AspNetCookbook" 
Assembly="RecipesVB" %>
<form id="Form1" method="post" runat="server">
 <AspNetCookbook:Recipe0301vb id="Recipe0301vb1" runat="server" />

Note that in Visual Studio .NET, a default namespace with the same name as the project is automatically prefixed to all Visual Basic class names. This is a frequent source of confusion and is inconsistent with how default namespaces are handled in C#, where they are inserted into each class file as a visible namespace. You can turn off this default behavior by setting the default namespace to an empty string in the Project Properties dialog box. You can determine the full namespace of a class by using the ILDASM.EXE command-line tool on the generated assembly, or by going into the class view utility in Visual Studio .NET.

To read the entire article from which this tip comes, click over to InformIT. No registration required, no info to give up. Just good info to get for yourself.

For More Information:

  • Looking for free research? Browse our comprehensive White Papers section by topic, author or keyword.
  • Are you tired of technospeak? The Web Services Advisor column uses plain talk and avoids the hype.
  • For insightful opinion and commentary from today's industry leaders, read our Guest Commentary columns.
  • Hey Codeheads! Start benefiting from these time-saving XML Developer Tips and .NET Developer Tips.

  • Visit our huge Best Web Links for Web Services collection for the freshest editor-selected resources.
  • Visit Ask the Experts for answers to your Web services, SOAP, WSDL, XML, .NET, Java and EAI questions.
  • Choking on the alphabet soup of industry acronyms? Visit our helpful Glossary for the latest industry lingo.
  • Couldn't attend one of our Webcasts? Don't miss out. Visit our archive to watch at your own convenience.
  • Discuss this article, voice your opinion or talk with your peers in the SearchWebServices Discussion Forums.

Dig Deeper on Topics Archive

Start the conversation

Send me notifications when other members comment.

Please create a username to comment.