ASP.Net/User Control and Master Page/WebControl
Содержание
- 1 Bindable user control (C#)
- 2 Bindable user control (VB)
- 3 SimpleControl extendsing System.Web.UI.WebControls.WebControl
- 4 SimpleControl extendsing System.Web.UI.WebControls.WebControl (C#)
- 5 User control based on System.Web.UI.WebControls.Label (C#)
- 6 User control based on System.Web.UI.WebControls.Label (VB)
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>