Reference Directive in ASP.Net using VB.NET

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!
 


Similar Articles