ASP.NET Tutorial/Custom Controls/Basics

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Action from user-defined control

   <source lang="csharp">

File: Control.ascx <%@ Control Language="C#" AutoEventWireup="true" CodeFile="Control.ascx.cs" Inherits="LinkMenu" %>

 Products:
 <asp:HyperLink id="lnkBooks" runat="server"
   NavigateUrl="MenuHost.aspx?product=Books">Books
 </asp:HyperLink>
<asp:HyperLink id="lnkToys" runat="server" NavigateUrl="MenuHost.aspx?product=Toys">Toys </asp:HyperLink>
<asp:HyperLink id="lnkSports" runat="server" NavigateUrl="MenuHost.aspx?product=Sports">Sports </asp:HyperLink>
<asp:HyperLink id="lnkFurniture" runat="server" NavigateUrl="MenuHost.aspx?product=Furniture">Furniture </asp:HyperLink>

File: Control.ascx.cs

using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class LinkMenu : System.Web.UI.UserControl {

   protected void Page_Load(object sender, EventArgs e)
   {
   }

}

File: MenuHost.aspx <%@ Page Language="C#" AutoEventWireup="true"

   CodeFile="MenuHost.aspx.cs" Inherits="MenuHost"%>

<%@ Register TagPrefix="nfex" TagName="LinkMenu" Src="Control.ascx" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">

   <title>Menu Host</title>

</head> <body>

   <form id="form1" runat="server">
                   <nfex:LinkMenu id="Menu1" runat="server" />
                     <asp:Label id="lblSelection" runat="server" />
   </form>

</body> </html>

File: MenuHost.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class MenuHost : System.Web.UI.Page {

   protected void Page_Load(object sender, EventArgs e)
   {
       if (Request.Params["product"] != null)
       {
           lblSelection.Text = "You chose: ";
           lblSelection.Text += Request.Params["product"];
       }
   }

}</source>


Adding controls to the Web user control

   <source lang="csharp">

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

<script runat="server">

</script>

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <asp:Button ID="Button1" runat="server" Text="Button" /></source>


ASP controls in user control

   <source lang="csharp">

<%@ Page Language="C#" AutoEventWireup="true" %> <%@ Register Src="Control.ascx" TagName="VaryByControl" TagPrefix="uc1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">

   <title>Untitled Page</title>

</head> <body>

   <form id="form1" runat="server">
       <uc1:VaryByControl ID="VaryByControl1" runat="server" />
   
   </form>

</body> </html> File: Control.ascx <%@ Control Language="C#"

           AutoEventWireup="true" 
           CodeFile="Control.ascx.cs" 
           Inherits="VaryByControl" %>

<%@ OutputCache Duration="30" VaryByControl="lstMode"  %> <asp:DropDownList id="lstMode" runat="server" Width="187px">

 <asp:ListItem>Large</asp:ListItem>
 <asp:ListItem>Small</asp:ListItem>
 <asp:ListItem>Medium</asp:ListItem>

</asp:DropDownList> 

Control generated at:
<asp:label id="TimeMsg" runat="server" />

File: Control.ascx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class VaryByControl : System.Web.UI.UserControl {

   protected void Page_Load(object sender, EventArgs e)
   {
   switch (lstMode.SelectedIndex)
   {
     case 0:
       TimeMsg.Font.Size = FontUnit.Large;
       break;
     case 1:
       TimeMsg.Font.Size = FontUnit.Small;
       break;
     case 2:
       TimeMsg.Font.Size = FontUnit.Medium;
       break;
   }
   TimeMsg.Text = DateTime.Now.ToString("F");
   }

}</source>


A Web user control file template

   <source lang="csharp">

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

<script runat="server">

</script></source>


Building a simple User control that randomly displays one image

   <source lang="csharp">

Both the UserControl class and the Page class derive from the base TemplateControl class. Custom control is stored in the file with .ascx extension. You cannot request this file directly from a web browser.

Before using a web User control, you must register it. <%@ Register %> directive contains the three attributes: TagPrefix: namespace. You can use any string that you want. TagName: name that you want to associate with the User control.

Src: virtual path to the User control (the path to the .ascx file).

File: Control.ascx <%@ Control Language="C#" ClassName="RandomImage" %> <%@ Import Namespace="System.IO" %> <script runat="server">

   void Page_Load()
   {
       string imageToDisplay = GetRandomImage();
       imgRandom.ImageUrl = Path.rubine("~/Images", imageToDisplay);
       lblRandom.Text = imageToDisplay;
   }
   private string GetRandomImage()
   {
       Random rnd = new Random();
       string[] images = Directory.GetFiles(MapPath("~/Images"), "*.jpg");
       string imageToDisplay = images[rnd.Next(images.Length)];
       return Path.GetFileName(imageToDisplay);
   }

</script> <asp:Image

   id="imgRandom"
   Width="300px"
   Runat="server" />


<asp:Label

   id="lblRandom"
   Runat="server" />

File: ShowRandomImage.aspx <%@ Page Language="C#" %> <%@ Register TagPrefix="user" TagName="RandomImage" Src="~/Control.ascx" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">

   <title>Show RandomImage</title>

</head> <body>

   <form id="form1" runat="server">
   <user:RandomImage
       ID="RandomImage1"
       Runat="server" />
   </form>

</body> </html></source>


Building Fully Rendered Controls

   <source lang="csharp">

File: FullyRenderedControl.cs namespace myControls {

   public class FullyRenderedControl : Control
   {
       private string _Text;
       public string Text
       {
           get { return _Text; }
           set { _Text = value; }
       }
       protected override void Render(HtmlTextWriter writer)
       {
           writer.Write(_Text);
       }
   }

} File: Default.aspx <%@ Page Language="C#" %> <%@ Register TagPrefix="custom" Namespace="myControls" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">

   <title>Show Fully Rendered Control</title>

</head> <body>

   <form id="form1" runat="server">
   <custom:FullyRenderedControl
       ID="FullyRenderedControl1"
       Text="Hello World!"
       runat="Server" />
   </form>

</body> </html></source>


Calculator component based on page component (VB.net)

   <source lang="csharp">

File: index.aspx <%@ Page language="VB" %> <%@ Register TagPrefix="nfexASP" TagName="Calculator" src="Control.ascx" %> <html><body>

  <form runat="server">
     <nfexASP:Calculator id="Calc1" runat="server"/>
  </form>

</body></html> File: Control.ascx <script language="VB" runat="server">

  private answer as double
  
  Sub btOperator_Click(Sender as Object, e as EventArgs)
     if (hiddenvalue.value <> "" and hiddenvalue.value <> "0")
        tbNumber.Text = Operate(Sender.Text, hiddenvalue.value, tbNumber.Text)
        hiddenvalue.value = ""
        hiddenoperator.value = ""
     else
        hiddenvalue.value = tbNumber.Text
        hiddenoperator.value = Sender.Text
        tbNumber.Text = "0"
     end if
  End Sub
  
  Sub btSpecOperator_Click(Sender as Object, e as EventArgs)
     tbNumber.Text = Operate(Sender.Text, hiddenvalue.value, tbNumber.Text)
     hiddenvalue.value = ""
     hiddenoperator.value = ""
  End Sub
  
  Sub btNumber_Click(Sender as Object, e as EventArgs)
     response.write(answer.ToString)
     if tbNumber.Text <> "0" then
        tbNumber.Text = tbNumber.Text & Sender.Text
     else
        tbNumber.Text = Sender.Text
        answer = nothing
     end if
  end sub
  
  Sub btClear_Click(Sender as Object, e as EventArgs)
     tbNumber.Text = "0"
     hiddenoperator.value = ""
     hiddenvalue.value = ""
  end sub
  
  Sub btBS_Click(Sender as Object, e as EventArgs)
     if tbNumber.Text <> "0" then
        tbNumber.Text = Left(tbNumber.Text, len(tbNumber.Text)-1) 
     end if
  end sub
  
  Sub btMemory_Click(Sender as Object, e as EventArgs)
     select case Sender.text
        case "MC"
           Session("memory") = ""
           Indicator.Text = ""
        case "MS"
           Session("memory") = tbNumber.Text
           Indicator.Text = "M"
        case "MR"
           tbNumber.Text = Session("Memory")
        case "M+"
           
     end select
  end sub
  
  Sub btEqual_Click(Sender as object, e as EventArgs)
     if hiddenvalue.value <> "" then
        if hiddenoperator.value <> "" then
           tbNumber.Text = Operate(hiddenoperator.value, hiddenvalue.value, tbNumber.Text)
           hiddenvalue.value = ""
           hiddenoperator.value = ""
           answer = tbNumber.Text
        else
           "do nothing
        end if
     else
        "do nothing
     end if
  end sub
  
  private function Operate(op as string, number1 as string, number2 as string ) as double
     select case op
        case "+"
           Operate = CDbl(number1) + CDbl(number2)
        case "-"
           Operate = CDbl(number1) - CDbl(number2)
        case "*"
           Operate = CDbl(number1) * CDbl(number2)
        case "/"
           Operate = CDbl(number1) / CDbl(number2)
        case "sqrt"
           Operate = CDbl(Math.sqrt(number2))
        case "1/x"
           Operate = CDbl(1 / cdbl(number2))
        case "+/-"
           Operate = CDbl(-cdbl(number2))
     end select
  end function

</script> <asp:Panel id="Frame" runat="server">

        <asp:textbox id="tbNumber" runat=server
           text="0"
           enabled="false"
           width="100%" />
        <asp:Label id="Indicator" text="" runat="server" />
        <asp:button id="btBS" Text="Backspace" 
           OnClick="btBS_Click" runat=server width="75"/>
        <asp:button id="btClear" Text="C" 
           OnClick="btClear_Click" runat=server width="35"/>
        <asp:button id="btMC" Text="MC" 
           OnClick="btMemory_Click" runat=server 
           width="35"/>
        <asp:button id="bt7" Text="7" 
           OnClick="btNumber_Click" runat=server 
           width="35"/>
        <asp:button id="bt8" Text="8" 
           OnClick="btNumber_Click" runat=server 
           width="35"/>
        <asp:button id="bt9" Text="9" 
           OnClick="btNumber_Click" runat=server 
           width="35"/>
        <asp:button id="btDivide" Text="/" 
           OnClick="btOperator_Click" runat=server 
           width="35"/>
        <asp:button id="btSqrt" Text="sqrt" 
           OnClick="btSpecOperator_Click" runat=server 
           width="35"/>
        <asp:button id="btMR" Text="MR" 
           OnClick="btMemory_Click" runat=server 
           width="35"/>
        <asp:button id="bt4" Text="4" 
           OnClick="btNumber_Click" 
           runat=server width="35"/>   
        <asp:button id="bt5" Text="5" 
           OnClick="btNumber_Click" runat=server 
           width="35"/>
        <asp:button id="bt6" Text="6" 
           OnClick="btNumber_Click" runat=server 
           width="35"/>
        <asp:button id="btMultiply" Text="*" 
           OnClick="btOperator_Click" runat=server 
           width="35"/>
        <asp:button id="btPercent" Text="%" 
           OnClick="btOperator_Click" runat=server 
           width="35"/>
        <asp:button id="btMS" Text="MS" 
           OnClick="btMemory_Click" runat=server 
           width="35"/>
        <asp:button id="bt1" Text="1" 
           OnClick="btNumber_Click" runat=server 
           width="35"/>   
        <asp:button id="bt2" Text="2" 
           OnClick="btNumber_Click" runat=server 
           width="35"/>
        <asp:button id="bt3" Text="3" 
           OnClick="btNumber_Click" runat=server 
           width="35"/>
        <asp:button id="btSubtract" Text="-" 
           OnClick="btOperator_Click" runat=server 
           width="35"/>
        <asp:button id="btOneOver" Text="1/x" 
           OnClick="btSpecOperator_Click" runat=server 
           width="35"/>
        <asp:button id="btMP" Text="M+" 
           OnClick="btMemory_Click" runat=server 
           width="35"/>
        <asp:button id="bt0" Text="0" 
           OnClick="btNumber_Click" runat=server 
           width="35"/>   
        <asp:button id="btNegate" Text="+/-" 
           OnClick="btSpecOperator_Click" runat=server 
           width="35"/>
        <asp:button id="btDot" Text="." 
           OnClick="btNumber_Click" runat=server 
           width="35"/>
        <asp:button id="btAdd" Text="+" 
           OnClick="btOperator_Click" runat=server 
           width="35"/>
        <asp:button id="btEqual" Text="=" 
           OnClick="btEqual_Click" runat=server 
           width="35"/>

</asp:Panel> <input type="hidden" id="hiddenvalue" value=""

  runat="server" >

<input type="hidden" id="hiddenoperator" value=""

  runat="server" ></source>
   
  

Component level variable

   <source lang="csharp">

<%@Import Namespace="System.Drawing" %> <%@Register TagPrefix="CodingStrategies" TagName="Color" Src="Control.ascx" %> <script language="C#" runat="server"> protected void SetColor(object o, EventArgs e) {

   Color color = Color.FromName(theTextbox.Text);
   colorControl.Color = color;

} </script> <form runat="server"> Name your favorite color <asp:textbox runat="server" id="theTextbox" OnTextChanged="SetColor" Value="Black"/>
Your favorite color is: <CodingStrategies:Color runat="server" id="colorControl" />
<asp:button type="submit" runat="server" Text="Go" /> </form> File: Control.ascx <%@Import namespace="System.Drawing" %> <script runat="server" language="C#"> protected Color favoriteColor = Color.Black; protected void Page_Load(Object o, EventArgs e) {

   theLabel.Text = favoriteColor.Name;   

} public Color Color {

   set {
       favoriteColor = value;
       theLabel.Text = favoriteColor.Name;
       theLabel.ForeColor = favoriteColor;
   }

} </script>

<asp:label id="theLabel" runat="server"/>

</source>


Creating control events in a user control (C#)

   <source lang="csharp">

<%@ Control Language="C#" ClassName="WebUserControl1" %> <script runat="server">

   protected void Page_Load(object sender, EventArgs e)
   {
       this.Label1.Text = "The quick brown fox jumped over the lazy dog";
   }
   protected void Button1_Click(object sender, EventArgs e)
   {
       this.Label1.Text = "The quick brown fox clicked the button on the page";
   }

</script> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /></source>


Creating control events in a user control (VB)

   <source lang="csharp">

<%@ Control Language="VB" ClassName="WebUserControl1" %> <script runat="server">

   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
       Me.Label1.Text = "The quick brown fox jumped over the lazy dog"
   End Sub
       
   Protected Sub Button1_Click(ByVal sender As Object, _
      ByVal e As System.EventArgs)
       Me.Label1.Text = "The quick brown fox clicked the button on the page"
   End Sub

</script> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /></source>


Day minder page component

   <source lang="csharp">

<%@ Page Language="VB" debug="true" %> <%@ Register TagPrefix="nfexASP" TagName="Planner" src="Control.ascx" %> <html><body>

  <form runat="server">
     <nfexASP:Planner id="Planner" runat="server" /> 
  </form>

</body></html> File: Control.ascx <script language="VB" runat="server">

  Public sub Page_Load(Sender as Object, e as EventArgs)
     if not Page.IsPostBack then
        Session.Clear
        Calendar1.SelectedDate = DateTime.Now
        DayLabel.Text = Calendar1.SelectedDate. _
           ToString("dddd, MMMM dd yyyy")
     end if
  End Sub
  
  Public sub SelectionChanged(Sender as Object, e as EventArgs)
     DayLabel.Text = Calendar1.SelectedDate. _
        ToString("dddd, MMMM dd yyyy")
     
     if not (Session(Calendar1.SelectedDate.ToString) is nothing)
        dim l as Label = new label
        l.Text = Session(Calendar1.SelectedDate.ToString)
        DayPanel.Controls.Add(l)
     end if
  End Sub
  
  Public sub NoteChanged(Sender as Object, e as EventArgs)
     if Sender.text <> "" then
        dim l as Label = New Label
l.text = "
  • " & Sender.Text & "
  • "
            DayPanel.Controls.Add(l)
            Session(Calendar1.SelectedDate.ToString) = l.text
            NoteBox.Text = ""
         end if
      End Sub
    

    </script>

         
            <asp:Label id="DayLabel" 
               runat="server" 
               Height="25px" 
               Width="100%"
               BackColor="blue" 
               ForeColor="white"
               Font-Bold="true"/>
            
    <asp:Panel id="DayPanel" runat="server" backcolor="#ffffff" Height="225px" > <asp:Textbox id="NoteBox" runat="server" OnTextChanged="NoteChanged" TextMode="Multiline" Rows=5 Width="100%" AutoPostBack="true" /> </asp:Panel>
         <asp:Calendar id="Calendar1" 
            runat="server"
            OnSelectionChanged="SelectionChanged"
            Cellpadding="5" 
            Cellspacing="5"
            DayHeaderStyle-Font-Bold="True"
            DayNameFormat="Short"
            Font-Name="Arial" 
            Font-Size="12px"
            height="250px"
            NextPrevFormat="ShortMonth"
            NextPrevStyle-ForeColor="white"
            SelectedDayStyle-BackColor="#ffcc66"
            SelectedDayStyle-Font-Bold="True"
            SelectionMode="DayWeekMonth"
            SelectorStyle-BackColor="#99ccff"
            SelectorStyle-ForeColor="navy"
            SelectorStyle-Font-Size="9px"
            ShowTitle="true"
            TitleStyle-BackColor="#ddaa66"
            TitleStyle-ForeColor="white"
            TitleStyle-Font-Bold="True"
            TodayDayStyle-Font-Bold="True" />
    
    </source>


    Exposing user control properties (C#)

       <source lang="csharp">
    

    <%@ Control Language="C#" ClassName="WebUserControl" %> <script runat="server">

       private string _text;
       
       public string Text
       {
           get {
               return _text;
           }
           set {
               _text = value;
           }
       }
       
       protected void Page_Load(object sender, EventArgs e)
       {
           this.Label1.Text = this.Text;
       }
       protected void Button1_Click(object sender, EventArgs e)
       {
           this.Label1.Text = "The quick brown fox clicked the button on the page";
       }
    

    </script> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /></source>


    Exposing user control properties (VB)

       <source lang="csharp">
    

    <%@ Control Language="VB" ClassName="WebUserControl" %> <script runat="server">

       Private _text As String
       
       Public Property Text() As String
           Get
               Return _text
           End Get
           Set(ByVal value As String)
               _text = value
           End Set
       End Property
       
       Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
           Me.Label1.Text = Me.Text
       End Sub
           
       Protected Sub Button1_Click(ByVal sender As Object, _
         ByVal e As System.EventArgs)
           Me.Label1.Text = "The quick brown fox clicked the button on the page"
       End Sub
    

    </script> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /></source>


    Pass parameter from user-defined controls to host page

       <source lang="csharp">
    

    File: Control.ascx <%@ Control Language="C#" AutoEventWireup="true" CodeFile="Control.ascx.cs" Inherits="Control" %>

       Products:
       <asp:LinkButton ID="lnkBooks" runat="server" CommandArgument="MenuHost.aspx?product=Books" OnCommand="lnk_Command" >Books
     </asp:LinkButton>
    <asp:LinkButton ID="lnkToys" runat="server" CommandArgument="MenuHost.aspx?product=Toys" OnCommand="lnk_Command">Toys </asp:LinkButton>
    <asp:LinkButton ID="lnkSports" runat="server" CommandArgument="MenuHost.aspx?product=Sports" OnCommand="lnk_Command">Sports </asp:LinkButton>
    <asp:LinkButton ID="lnkFurniture" runat="server" CommandArgument="MenuHost.aspx?product=Furniture" OnCommand="lnk_Command">Furniture </asp:LinkButton>

    File: Control.ascx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class LinkMenu : System.Web.UI.UserControl {

       public event LinkClickedEventHandler LinkClicked;
       protected void lnk_Command(object sender, CommandEventArgs e)
       {
           if (LinkClicked != null)
           {
               LinkClickedEventArgs args = new LinkClickedEventArgs((string)e.rumandArgument);
               LinkClicked(this, args);
               if (!args.Cancel)
               {
                   Response.Redirect(args.Url);
               }
           }
       }
    

    } File: MenuHost.aspx

    <%@ Page Language="C#" AutoEventWireup="true"

       CodeFile="MenuHost.aspx.cs" Inherits="MenuHost"%>
    

    <%@ Register TagPrefix="nfex" TagName="LinkMenu" Src="Control.ascx" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">

       <title>Menu Host</title>
    

    </head> <body>

       <form id="form1" runat="server">
    
                       <nfex:LinkMenu id="Menu1" runat="server" OnLinkClicked="LinkClicked" />
    
                         <asp:Label id="lblSelection" runat="server" EnableViewState="false"/>
      <asp:Label id="lblClick" runat="server" EnableViewState="false"/>
           
     
       </form>
    

    </body> </html>

    File: MenuHost.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public class LinkClickedEventArgs : EventArgs {

       private string url;
       public string Url
       {
           get { return url; }
           set { url = value; }
       }
       private bool cancel = false;
       public bool Cancel
       {
           get { return cancel; }
           set { cancel = value; }
       }
       public LinkClickedEventArgs(string url)
       {
           Url = url;
       }
    

    } public delegate void LinkClickedEventHandler(object sender, LinkClickedEventArgs e);

    public partial class MenuHost : System.Web.UI.Page {

       protected void Page_Load(object sender, EventArgs e)
       {
           if (!Page.IsPostBack)
           {
               if (Request.Params["product"] != null)
               {
                   lblSelection.Text = "You chose: ";
                   lblSelection.Text += Request.Params["product"];
               }
           }
       }
       protected void LinkClicked(object sender, LinkClickedEventArgs e)
       {
           if (e.Url == "MenuHost.aspx?product=Furniture")
           {
               lblClick.Text = "This link is not allowed.";
               e.Cancel = true;
           }
       }
    

    }</source>


    Populating user control properties from the host Web page (C#)

       <source lang="csharp">
    

    <%@ Page Language="C#" %> <%@ Register Src="Control.ascx" TagName="WebUserControl" TagPrefix="uc1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server">

       protected void Page_Load(object sender, EventArgs e)
       {
           this.WebUserControl1.Text = "The quick brown fox jumped over the lazy dog";
       }
    

    </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">

       <title>Untitled Page</title>
    

    </head> <body>

       <form id="form1" runat="server">
    
           <uc1:WebUserControl id="WebUserControl1" runat="server">
    
    </uc1:WebUserControl>
       </form>
    

    </body> </html> File: Control.ascx <%@ Control Language="C#" ClassName="WebUserControl" %> <script runat="server">

       private string _text;
       
       public string Text
       {
           get {
               return _text;
           }
           set {
               _text = value;
           }
       }
       
       protected void Page_Load(object sender, EventArgs e)
       {
           this.Label1.Text = this.Text;
       }
       protected void Button1_Click(object sender, EventArgs e)
       {
           this.Label1.Text = "The quick brown fox clicked the button on the page";
       }
    

    </script> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /></source>


    Populating user control properties from the host Web page (VB)

       <source lang="csharp">
    

    <%@ Page Language="VB" %> <%@ Register Src="Control.ascx" TagName="WebUserControl"

       TagPrefix="uc1" %>
    

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

       Me.WebUserControl1.Text = "The quick brown fox jumped over the lazy dog"
    

    End Sub </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">

       <title>Untitled Page</title>
    

    </head> <body>

       <form id="form1" runat="server">
    
           <uc1:WebUserControl ID="WebUserControl1" runat="server" />
    
       </form>
    

    </body> </html> File: Control.ascx <%@ Control Language="VB" ClassName="WebUserControl" %> <script runat="server">

       Private _text As String
       
       Public Property Text() As String
           Get
               Return _text
           End Get
           Set(ByVal value As String)
               _text = value
           End Set
       End Property
       
       Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
           Me.Label1.Text = Me.Text
       End Sub
           
       Protected Sub Button1_Click(ByVal sender As Object, _
         ByVal e As System.EventArgs)
           Me.Label1.Text = "The quick brown fox clicked the button on the page"
       End Sub
    

    </script> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /></source>


    Registering User Controls in the Web Configuration File

       <source lang="csharp">
    

    File: Control.ascx <%@ Control Language="C#" ClassName="RandomImage" %> <%@ Import Namespace="System.IO" %> <script runat="server">

       void Page_Load()
       {
           string imageToDisplay = GetRandomImage();
           imgRandom.ImageUrl = Path.rubine("~/Images", imageToDisplay);
           lblRandom.Text = imageToDisplay;
       }
       private string GetRandomImage()
       {
           Random rnd = new Random();
           string[] images = Directory.GetFiles(MapPath("~/Images"), "*.jpg");
           string imageToDisplay = images[rnd.Next(images.Length)];
           return Path.GetFileName(imageToDisplay);
       }
    

    </script> <asp:Image

       id="imgRandom"
       Width="300px"
       Runat="server" />
    


    <asp:Label

       id="lblRandom"
       Runat="server" />
       
    

    File: Web.Config <configuration> <system.web>

     <pages>
       <controls>
         <add
           tagPrefix="user"
           tagName="RandomImage"
           src="~/UserControls/Control.ascx"/>
       </controls>
     </pages>
    

    </system.web> </configuration>

    After you register a User control in the web configuration file, you can declare the User control in any page. File: Default.aspx <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">

       <title>Show Application Register</title>
    

    </head> <body>

       <form id="form1" runat="server">
    
       <user:RandomImage
           ID="RandomImage1"
           Runat="Server" />
    
       </form>
    

    </body> </html></source>


    Use custom control in Assembly

       <source lang="csharp">
    

    <%@ Page Language="VB" %> <%@ Register TagPrefix="nfexASP" Namespace="MyCustomControls" Assembly="CustomControls"%> <html><body>

      <form runat=server>
         The custom control produces the following output:
      
         <nfexASP:CustomControl1 id="MyControl" runat=server/>
      </form>
    

    </body></html> //////C# using System; using System.Web; using System.Web.UI;

    namespace MyCustomControls {

      public class CustomControl1 : Control {
         protected override void Render(HtmlTextWriter Output) {
            Output.Write("This is my custom control! ");
         }
      }
    

    } //////VB Imports System Imports System.Web Imports System.Web.UI Namespace MyCustomControls

      Public Class CustomControl1 : Inherits Control
         Protected Overrides Sub Render(Output as HtmlTextWriter)
            Output.Write("This is my custom control! ")
         End Sub
      End Class
    

    End Namespace</source>


    User control with property

       <source lang="csharp">
    

    <%@ Page Language="C#" %> <%@ Register TagPrefix="apress" TagName="TimeDisplay" Src="Control.ascx" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <script runat="server"> </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">

       <title>Untitled Page</title>
    

    </head> <body>

       <form id="form1" runat="server">
    
       <apress:TimeDisplay id="TimeDisplay1" 
     Format="dddd, dd MMMM yyyy HH:mm:ss tt (GMT z)" runat="server" />
    

    <apress:TimeDisplay id="TimeDisplay2" runat="server" />

       </form>
    

    </body> </html> File: Control.ascx <%@ Control Language="C#"

               AutoEventWireup="true" 
               CodeFile="Control.ascx.cs" 
               Inherits="TimeDisplay" %>
    


    <asp:LinkButton runat="server" ID="lnkTime" OnClick="lnkTime_Click"/> File: Control.ascx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class TimeDisplay : System.Web.UI.UserControl {

     protected void Page_Load(object sender, EventArgs e)
     {
       RefreshTime();
     }
     protected void lnkTime_Click(object sender, EventArgs e)
     {
       RefreshTime();
     }
     public void RefreshTime()
     {
       if (format == "")
       {
         lnkTime.Text = DateTime.Now.ToLongTimeString();
       }
       else
       {
         lnkTime.Text = DateTime.Now.ToString(format);
       }
     }
     private string format;
     public string Format
     {
       get { return format; }
       set { format = value; }
     }
    

    }</source>