Introduction

In general when we load a User control with the Page.LoadControl() method, the User control is returned as an instance of the System.Web.UI.Control class. This means that if the User control includes any custom properties, the properties aren't available when we dynamically load the User control. If we dynamically load a User control, then we need to cast the control to the correct type before we can access any of the control's custom properties. To get a reference to a User control's type, we must use the <%@ Reference %> directive.

Taking an example, imagine that we need to create a form that displays different questions depending on the answers that a user provides for previous questions. In that case, we can dynamically load different User controls that contain the different sets of questions. The page given below contains a survey form. The first question asks us whether we are currently using VS 4.0 or VS 3.5 and depending on our answer, the remainder of the form displays different questions.

Default2.aspx File Code

<%@ Page Language="VB" %>
<%@ Reference Control="~/ASPSurvey.ascx" %>
<%@ Reference Control="~/ASPNetSurvey.ascx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server">

Private _survey As Control = Nothing

Private Sub Page_Load()
Select Case ddlLanguage.SelectedIndex
Case 1
_survey = Page.LoadControl("ASPSurvey.ascx")
Case 2
_survey = Page.LoadControl("ASPNetSurvey.ascx")
End Select

If Not IsNothing(_survey) Then
PlaceHolder1.Controls.Add(_survey)
End If
End Sub

Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As EventArgs)
Select Case ddlLanguage.SelectedIndex
Case 1
Dim aspResults As ASPSurvey = CType(_survey, ASPSurvey)
ltlResults.Text = "<h1>ASP Survey</h1>"
ltlResults.Text += "<br/>ASP is fast? " + aspResults.KnowFast.ToString()
ltlResults.Text += "<br />ASP is very difficult to learn? " + aspResults.KnowNewest.ToString()
Case 2
Dim aspNetResults As ASPNetSurvey = CType(_survey, ASPNetSurvey)
ltlResults.Text = "<h1>PHP Survey</h1>"
ltlResults.Text += "<br />PHP is fast? " + aspNetResults.KnowSlow.ToString()
ltlResults.Text += "<br />PHP is very difficult to learn? " + aspNetResults.KnowOutdated.ToString()
End Select
End Sub

</script>
<
html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<style type="text/css">
html
{
font:14px Arial,Sans-Serif;
background-color:Aqua;
}
</style>
<title>Web Survey</title>
</head>
<
body>
<form id="form1" runat="server">
<div>

<asp:Label
id="lblLanguage"
Text="What language do you use to develop Web applications?"
Runat="server" />
<br />
<asp:DropDownList
id="ddlLanguage"
ToolTip="Web application language (reloads form)"
AutoPostBack="true"
Runat="server">
<asp:ListItem Text="Select Language" />
<asp:ListItem Text="ASP" />
<asp:ListItem Text="PHP" />
</asp:DropDownList>

<br /><br />

<asp:PlaceHolder
id="PlaceHolder1"
Runat="server" />

<asp:Button
id="btnSubmit"
Text="Submit"
OnClick="btnSubmit_Click"
Runat="server" />

<hr />

<asp:Literal
id="ltlResults"
Runat="server" />

</div>
</form>
</body>
</
html>

Now depending on the user's selection from the DropDownList control, one of two User controls is loaded in the Page_Load() event handler: the ASPSurvey.ascx or the PHPSurvey.ascx User control. When we submit the survey form, the btnSubmit_Click() method executes. This method casts the User control loaded in the form to the correct type. It casts the User control to either the ASPSurvey or the PHPSurvey type.

ASP.Survey.ascx File Code

<%@ Control Language="VB" ClassName="ASPSurvey" %>

<script runat="server">

Public ReadOnly Property KnowFast() As Boolean
Get
Return chkFast.Checked
End Get
End Property

Public ReadOnly Property KnowNewest() As Boolean
Get
Return chkNewest.Checked
End Get
End Property
</script>
<
asp:CheckBox
id="chkFast"
Text="Did you know that ASP is fast?"
Runat="server" />

<br /><br />

<asp:CheckBox
id="chkNewest"
Text="Did you know that ASP is very difficult to learn?"
Runat="server" />
<br /><br /><br />

PHPSurvey.ascx File Code

<%@ Control Language="VB" ClassName="PHPSurvey" %>

<script runat="server">

Public ReadOnly Property KnowSlow() As Boolean
Get
Return chkSlow.Checked
End Get
End Property

Public ReadOnly Property KnowOutdated() As Boolean
Get
Return chkOutdated.Checked
End Get
End Property
</script>

<asp:CheckBox
id="chkSlow"
Text="Did you know that PHP is slow?"
Runat="server" />

<br /><br />

<asp:CheckBox
id="chkOutdated"
Text="Did you know that PHP is very difficult to learn?"
Runat="server" />
<br /><br /><br />

image1.gif

It is very easy to develop and widely used over web.

HAVE A GREAT CODING!