Introducing Custom Controls
 
Published: 23 Jul 2002
Unedited - Community Contributed
Abstract
There are two types of controls in ASP.NET--custom controls and user controls. These two types of controls are quite different. This article will take you through the basics of creating a custom control.
by . .
Feedback
Average Rating: This article has not yet been rated.
Views (Total / Last 10 Days): 27418/ 55

Introduction

Introduction

There are essentially two types of controls in ASP.NET--custom controls and user controls. These two types of controls are quite different. Custom controls are compiled into a DLL and are essentially what the ASP.NET web server controls are; they provide a very high level of flexibility in your controls, but it's not exactly an easy experience (as contrasted to user controls). This article will take you through the basics of creating custom controls.

What are they?

What are they?

Custom controls are controls that are written 100% in code and are then compiled into a DLL. Then they can be registered and inserted much like a user control. The difference comes into what you can put in them and what you can do with them. They can provide the same high level that server controls do and don't have to be a bunch of other server controls together.

Vs. User Controls

Custom Controls User Controls
  • HTML rendering needs to be coded (no visual designer in VS.NET).
  • Created totally in code and compiled as a complete class library.
  • Easy to distribute and manage.
  • Can have full use of the designer in VS.NET
  • Can be referenced in the implementing page's code.
  • As simple as web forms to create (just drag and drop in VS.NET).
  • Created as an ASP.NET page but stripped and with the .ASCX extension.
    (this is probably over-simplifying it).
  • Sometimes has multiple text files and not as easy to distribute and incorporate.
  • Little to no use of the designer in VS.NET
  • Can't be referenced in the implementing page's code.

Functionality

I said earlier that they had a lot of functionality, and it's true. They can be built with the same functionality as server controls without the limitations of user controls. The downside is that it all has to be done through code, although you will find that it is actually quite simple to do.

For example, you can dynamically set the properties and handle events raised by the custom control, which you can't do in user controls.

Getting Started

Getting Started

In VS.NET you just create a Web Custom Control Library and you're set.

In Notepad, you will need to create a normal .vb file and add the following -

Imports System.Web.UI

Namespace
AGASP

Public
Class
Ctrl1
Inherits
System.Web.UI.WebControls.WebControl

..code goes here...

End Class

End
Namespace

You can see that we are Inheriting the System.Web.UI.WebControls.WebControl class, we could Inherit the Control class, but this one already does inherit Control and provides some additional methods, properties etc.

Coding, Compiling & Rendering

Adding Code

Usually code will be added in the Render event -

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

...code...

End
Sub

Note here that we Override the Render event. You can also add the code in any one of the other events.

I will be looking at this in more detail later on.

Compiling

Compiling the custom control is as simple as running the following at the command prompt (or building it in VS.NET) -

vbc /t:library /r:System.dll,System.Web.dll CustomControlFileName.vb

Displaying

As with a class library, you simply put the resulting DLL into the /bin directory of the target application and then register the tag on each page you want to use it on -

<%@ Register TagPrefix="MyPrefix" Namespace="AGASP" Assembly="AGASP" %>

To register the control on the page. Then use the normal server/user control style to include it.

<MyPrefix:ctrl1 id="TestControl" runat="server" />

Note that the syntax is - TagPrefix:ClassName. This allows you to have multiple controls in one namespace (again making a reference to the Web Server Controls).

Output

Output

All of the code that we will use to display information will be added to the Render.

You will notice that the Render method takes an HTMLTextWriter as a parameter, this output object can be used to write the appropriate information -

output.AddAttribute("border", "1")
output.AddStyleAttribute("border-color", "#000000")
output.RenderBeginTag("table")
output.Write(Text)
output.RenderEndTag()

That code will print out the following HTML -

<table border="1" style="border-color:#000000;">
Hello There
</table>

Let's go over these methods.

Additional Methods

AddAttribute

This method takes in the name of the attribute and the value of it. In the above example I passed in border for the name and 1 for the value.

AddStyleAttribute

This method takes in the name of the style property and the value of it. Using this method, it properly formats your style attribute without you having to mess around with it and probably get a syntax error along the way.

RenderBeginTag/RenderEndTag

These two methods start rendering and stop rendering the tag specified by RenderBeginTag. Using these methods take some adjustment, but in the end they present properly formatted code. They also allow you to make the code more dynamic (easier than having a lot of ' "something" & varname & "something" ') with ease.

Summary

This article has barely scratched the surface of custom controls, in future articles, I will show you more about advanced custom controls and other things that you can do with them.



User Comments

Title: Custom vs. User control BLUNDER – user control CAN be referenced in the code.   
Name: Igor Kikena
Date: 2005-03-14 3:53:38 PM
Comment:
Implementing page can reference user control exactly the same way as custom control, otherwise there is really little use for them. And Yes, it does not create user control variable when you drag and drop it on the page, contrary to custom control. So leave your mouse alone and strike the damn keyboard and enjoy user controls in the code behind.

Igor Kikena
Title: Ok..Its a good Topic   
Name: Esha
Date: 2005-03-08 4:47:14 AM
Comment:
I will be better if u give an sample code for building custom control and embedding it in asp webform page
Title: airo   
Name: airo
Date: 2005-01-13 10:13:47 PM
Comment:
Excellent topic and well explained.

Product Spotlight
Product Spotlight 





Community Advice: ASP | SQL | XML | Regular Expressions | Windows


©Copyright 1998-2024 ASPAlliance.com  |  Page Processed at 2024-04-24 7:26:37 PM  AspAlliance Recent Articles RSS Feed
About ASPAlliance | Newsgroups | Advertise | Authors | Email Lists | Feedback | Link To Us | Privacy | Search