Composite Control vs. User Control
The following table summarizes the differences between composite controls and user controls. For details about authoring a user control, see Web Forms User Controls.
Composite Control | User Control |
---|---|
Minimal design-time support for authoring. | Full design-time support for authoring. Authoring a user control in a visual designer is no different from authoring an ASP.NET page (Web Forms page). |
Authored programmatically in an object-oriented programming language that targets the common language runtime, such as C# or Visual Basic .NET. | Authored declaratively using ASP.NET page syntax and script blocks (or code-behind pages).
|
Compiled and persisted as an assembly (.dll). | Saved as a text file with an .ascx extension (with an optional code-behind file). |
Well suited to authoring generic redistributable controls. | Geared toward application-specific functionality. |
Full design-time support when used in a design-time host. A composite control can be added to the toolbox of a visual designer and dragged and dropped onto a page. | Minimal support for use in a designer. |
Note If you want to extend the functionality of a single control, for instance Label, do not create a composite control or a user control. In that case, you should derive from Label (to get the benefits of inheritance and polymorphism) and add or override members. If you create a user control (or composite control) that contains only one control, Label, your new control no longer has the object model of Label. You should create a user control (or a composite control) only when you want to combine multiple existing controls.
The following sample shows a user control that is equivalent to the composite control developed in the Composite Server Control Sample. The user control raises a custom event named Check
. The event delegate CheckEventHandler
and the event data class CheckEventArgs
, which are used by the Check
event, are defined in the Composite Server Control Sample.
<%-- UserControl.ascx. --%>
<%-- The namespace CustomControls has to be imported because it contains
CheckEventArgs and CheckEventHandler. --%>
<%@Import Namespace = "CustomControls" %>
<script language="VB" runat=server>
Private ReadOnly Property Sum() As Integer
Get
EnsureChildControls()
Return Int32.Parse(box1.Text) + Int32.Parse(box2.Text)
End Get
End Property
Public Number As Integer = 100
Public Property Text() As String
Get
EnsureChildControls()
Return label.Text
End Get
Set
EnsureChildControls()
label.Text = value
End Set
End Property
Public Event Check As CheckEventHandler
Protected Overridable Sub OnCheck(e As CheckEventArgs)
RaiseEvent Check(Me, e)
End Sub
Private Sub Button_Clicked(sender As Object, e As EventArgs)
OnCheck(New CheckEventArgs(Sum - Number))
End Sub
</script>
<h3>Enter a number :
<asp:TextBox id = box1 text = "0" runat = server />
</h3> <br>
<h3>Enter another number :
<asp:TextBox id = box2 text = "0" runat = server />
</h3> <br>
<asp:Button id = button text = "Submit" OnClick = "Button_Clicked" runat = server />
<br> <br>
<asp:Label id = label text = "Click sumbit to see if you won."
height = 100 width = 400 runat = server />
Using a User Control on a Page
The following page uses the user control UserControl.ascx
on an ASP.NET page. For more details, see Including a User Control in a Web Forms Page.
<%@Import Namespace = "CustomControls" %>
<%@ Register TagPrefix="MyUserControl" TagName = "MyControl" Src = "UserControl.ascx" %>
<script language="VB" runat=server>
Private Sub Sum_Checked(sender As Object, e As CheckEventArgs)
If e.Match = True Then
control.Text = "<h2> You won a million dollars!!!! </h2>"
Else
control.Text = "Sorry, try again. The numbers you entered don't add up to" & _
" the hidden number."
End If
End Sub
</script>
<html>
<body>
<h1> The mystery sum game </h1><br>
<form runat=server>
<MyUserControl:MyControl id = "control" OnCheck = "Sum_Checked" Number = "10" runat = server/>
</form>
</body>
</html>