ASP.Net/User Control and Master Page/WebControl

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

Bindable user control (C#)

   <source lang="csharp">

<%@ Page Language="c#" %> <%@ Register TagPrefix="Control" Namespace="Control" Assembly="Control" %> <script runat="server">

 void Page_Load(object sender, EventArgs e)
 {
   listControl.DataSource = new String[] {"Test 1", "Test 2", "Test 3"};
   listControl.DataBind();
 }

</script> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <html> <head> <title>Default</title> </head> <body> <Control:CustomBulletedList id="listControl" runat="server"/> </body> </html> File: Control.cs using System; using System.Web.UI; using System.Web.UI.WebControls; using System.ruponentModel; using System.Collections; using System.Text; namespace Control {

 [DefaultProperty("DataSource"),
 ToolboxData("<{0}:CustomBulletedList runat=\"server\"></{0}:CustomBulletedList>")]
 public class CustomBulletedList : System.Web.UI.WebControls.WebControl
 {
   private StringBuilder _html  = new StringBuilder();
   private IEnumerable  _dataSource;
   [Bindable(true),
   Category("Data"),
   DefaultValue(null),
   Description("The data source used to build up the bulleted list."),
   DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
   public IEnumerable DataSource {
     get {
       return _dataSource;
     }
     set {
       _dataSource = value;
     }
   }
   private void CreateBulletedList()
   {
     IEnumerable dataSource = null;
     try {
       dataSource = this._dataSource;
     } catch {
       dataSource = null;
     }
     if (dataSource != null)
     {
_html.Append("
    "); foreach (object dataObject in dataSource) { _html.Append("
  • "); _html.Append(dataObject.ToString()); _html.Append("
  • ");
           }
    
    _html.Append("
");
     }
   }
   public override void DataBind()
   {
     base.OnDataBinding(EventArgs.Empty);
     CreateBulletedList();
   }
   protected override void Render(HtmlTextWriter output)
   {
     output.Write(_html);
   }
 }

}

</source>
   
  


Bindable user control (VB)

   <source lang="csharp">

<%@ Page Language="VB" %> <%@ Register TagPrefix="Control" Namespace="Control" Assembly="Control" %> <script language="vb" runat="server"> Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

 listControl.DataSource = New String() {"Test 1", "Test 2", "Test 3"}
 listControl.DataBind()

End Sub </script> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <html>

 <head>
   <title>Creating a Databound Control</title>
 </head>
 <body>
   <Control:CustomBulletedList id="listControl" runat="server" />
 </body>

</html> File: Control.vb Imports System Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.ruponentModel Imports System.Collections Imports System.Text Namespace Control

   Public Class CustomBulletedList
       Inherits System.Web.UI.WebControls.WebControl
       Private _html As New StringBuilder()
       Private _dataSource As IEnumerable
       Public Property DataSource() As IEnumerable
           Get
               Return _dataSource
           End Get
           Set(ByVal value As IEnumerable)
               _dataSource = value
           End Set
       End Property
       Private Sub CreateBulletedList()
           Dim dataSource As IEnumerable = Nothing
           Try
               dataSource = Me._dataSource
           Catch
           End Try
           If Not (dataSource Is Nothing) Then
_html.Append("
    ") Dim dataObject As Object For Each dataObject In dataSource _html.Append("
  • ") _html.Append(dataObject) _html.Append("
  • ")
                   Next dataObject
    
    _html.Append("
")
           End If
       End Sub
       Public Overrides Sub DataBind()
           MyBase.OnDataBinding(EventArgs.Empty)
           CreateBulletedList()
       End Sub
       Protected Overrides Sub Render(ByVal output As HtmlTextWriter)
           output.Write(_html)
       End Sub
   End Class

End Namespace

</source>
   
  


SimpleControl extendsing System.Web.UI.WebControls.WebControl

   <source lang="csharp">

<%@ Page language="C#" %> <%@ Register TagPrefix="Control" Namespace="Control" Assembly="Control" %> <script language="C#" runat="server"> void Page_Load(object sender, EventArgs e) {

 if (!IsPostBack)
 {
   Random rand = new Random();
   SimpleControl1.Text = rand.Next(1,100).ToString();
 }

} </script> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <html>

 <body>
   <form id="Form1" method="post" runat="server">
     <Control:SimpleControl id="SimpleControl1" runat="server" />
     <asp:linkbutton text="PostBack test" runat="server" />

Values are not maintained across postbacks. <a href="Control.aspx">Re-load</a>

   </form>
 </body>

</html> File: Control.cs

using System; using System.Web.UI; using System.Web.UI.WebControls; using System.ruponentModel; namespace Control {

 [DefaultProperty("Text"), ToolboxData("<{0}:Control runat=server></{0}:Control>")]
 public class SimpleControl : System.Web.UI.WebControls.WebControl
 {
   private string _text;
 
   [Bindable(true), 
     Category("Appearance"), 
     DefaultValue("")] 
   public string Text 
   {
     get
     {
       return _text;
     }
     set
     {
       _text = value;
     }
   }
   protected override void Render(HtmlTextWriter output)
   {
     output.Write(Text);
   }
 }

}

</source>
   
  


SimpleControl extendsing System.Web.UI.WebControls.WebControl (C#)

   <source lang="csharp">

<%@ Page language="VB" %> <%@ Register TagPrefix="Control" Namespace="Control" Assembly="Control" %> <script runat="server"> Sub Page_Load(Sender As Object, E As EventArgs)

 If Not IsPostBack Then
   Dim RandomGenerator As Random
   RandomGenerator = New Random()
   SimpleControl1.Text = RandomGenerator.Next(1,100)
 End If

End Sub </script> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <html>

 <head>
   <title>Default</title>
 </head>
 <body>
   <form id="Form1" method="post" runat="server">
     <Control:SimpleControl id="SimpleControl1" runat="server" />
     <asp:linkbutton text="PostBack test" runat="server" />

Values are not maintained across postbacks. <a href="Control.aspx">Re-load</a>

   </form>
 </body>

</html> File: Control.vb Imports System.ruponentModel Imports System.Web.UI Namespace Control

   <DefaultProperty("Text"), ToolboxData("<{0}:Control runat=server></{0}:Control>")> Public Class SimpleControl
       Inherits System.Web.UI.WebControls.WebControl
       Dim _text As String
       <Bindable(True), Category("Appearance"), DefaultValue("")> Property [Text]() As String
           Get
               Return _text
           End Get
           Set(ByVal Value As String)
               _text = Value
           End Set
       End Property
       Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)
           output.Write([Text])
       End Sub
   End Class

End Namespace

</source>
   
  


User control based on System.Web.UI.WebControls.Label (C#)

   <source lang="csharp">

<%@ Page Language="C#" %> <%@ Register TagPrefix="Control" Namespace="Control" Assembly="Control" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <html>

 <head>
   <title>Custom Controls - Extending Existing Web Controls</title>
 </head>
 <body>
   <form id="Form1" method="post" runat="server">
     <Control:RainbowLabel text="This is a rainbow colored test string" runat="server" />
<Control:RainbowLabel EnableRainbowMode="false" text="This is a test string" runat="server" /> </form> </body>

</html> File: Control.cs using System; using System.Web.UI; using System.Web.UI.WebControls; using System.ruponentModel; namespace Control {

 [ToolboxData("<{0}:RainbowLabel runat=server></{0}:RainbowLabel>")]
 public class RainbowLabel : System.Web.UI.WebControls.Label
 {
   public bool EnableRainbowMode
   {
     get { return (ViewState["EnableRainbowMode"] == null)? true : bool.Parse( ViewState["EnableRainbowMode"].ToString() ); }
     set { ViewState["EnableRainbowMode"] = value; }
   }
   protected override void Render(HtmlTextWriter output)
   {
     if (EnableRainbowMode)
       output.Write( ColorizeString(Text) );
     else
       output.Write(Text);
   }
   private string ColorizeString(string input)
   {
     System.Text.StringBuilder output = new System.Text.StringBuilder(input.Length);
     Random rand = new Random(DateTime.Now.Millisecond);
     for (int i = 0; i < input.Length; i++)
     {
       int red = rand.Next(0, 255);
       int green = rand.Next(0, 255);
       int blue = rand.Next(0, 255);
       output.Append("");
       output.Append( input.Substring(i, 1) );
       output.Append("");
     }
     return output.ToString();
   }
 }

}

</source>
   
  


User control based on System.Web.UI.WebControls.Label (VB)

   <source lang="csharp">

<%@ Page language="VB" %> <%@ Register TagPrefix="Control" Namespace="Control" Assembly="Control" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <html>

 <head>
   <title>Extending Existing Web Controls</title>
 </head>
 <body>
   <form id="Form1" method="post" runat="server">
     <Control:RainbowLabel text="This is a rainbow colored test string" runat="server" />
<Control:RainbowLabel EnableRainbowMode="false" text="This is a test string" runat="server" /> </form> </body>

</html> File: Control.vb Imports System Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.ruponentModel Namespace Control

   Public Class RainbowLabel
       Inherits System.Web.UI.WebControls.Label
       Public Property EnableRainbowMode() As Boolean
           Get
               If ViewState("EnableRainbowMode") Is Nothing Then
                   Return True
               Else
                   Return Boolean.Parse(CStr(ViewState("EnableRainbowMode")))
               End If
           End Get
           Set(ByVal Value As Boolean)
               ViewState("EnableRainbowMode") = Value
           End Set
       End Property
       Protected Overrides Sub Render(ByVal output As HtmlTextWriter)
           If EnableRainbowMode Then
               output.Write(ColorizeString([Text]))
           Else
               output.Write([Text])
           End If
       End Sub "Render
       Private Function ColorizeString(ByVal input As String) As String
           Dim output As New System.Text.StringBuilder(input.Length)
           Dim rand As Random = New Random(DateTime.Now.Millisecond)
           Dim i As Integer
           For i = 0 To input.Length - 1
               Dim red As Integer = rand.Next(0, 255)
               Dim green As Integer = rand.Next(0, 255)
               Dim blue As Integer = rand.Next(0, 255)
               output.Append("")
               output.Append(input.Substring(i, 1))
               output.Append("")
           Next i
           Return output.ToString()
       End Function "ColorizeString
   End Class "RainbowLabel

End Namespace

</source>