Home > Articles > Programming > ASP .NET

  • Print
  • + Share This
This chapter is from the book

This chapter is from the book

3.1. Declaring a Simple Custom Control

You want to create a simple custom control to output some text.


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.

  • + Share This
  • 🔖 Save To Your Account