ASP.Net/User Control and Master Page/Property
Содержание
Creating ViewState-Enabled Control Properties (C#)
<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(); ViewStateControl1.Text = rand.Next(1,100).ToString(); }
} </script> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <html>
<head> <title>Creating ViewState-Enabled Control Properties</title> </head> <body> <form id="Form1" method="post" runat="server"> <Control:ViewStateControl id="ViewStateControl1" runat="server" /> <asp:linkbutton text="PostBack test" runat="server" /> </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}:ViewStateControl runat=server></{0}:ViewStateControl>")] public class ViewStateControl : System.Web.UI.WebControls.WebControl { public string Text { get { string text = (string) ViewState["Text"]; return (text == null)? string.Empty : text; } set { ViewState["Text"] = value; } } protected override void Render(HtmlTextWriter writer) { writer.Write(Text); } }
}
</source>
Creating ViewState-Enabled Control Properties (VB)
<source lang="csharp">
<%@ Page language="VB" %> <%@ Register TagPrefix="Control" Namespace="Control" Assembly="Control" %> <script language="VB" runat="server"> Sub Page_Load(Sender As Object, E As EventArgs)
If Not IsPostBack Then Dim RandomGenerator As Random RandomGenerator = New Random(DateTime.Now.Millisecond) ViewStateControl1.Text = RandomGenerator.Next(1,100) End If
End Sub </script> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <html>
<body ms_positioning="GridLayout"> <form id="Form1" method="post" runat="server"> <Control:viewstatecontrol id="ViewStateControl1" runat="server" /> <asp:linkbutton text="PostBack test" runat="server" id="Linkbutton1" /> </form> </body>
</html>
File: Default.vb Imports System Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.ruponentModel Namespace Control
Public Class ViewStateControl Inherits System.Web.UI.WebControls.WebControl Public Property Text() As String Get Dim _text As String = CStr(ViewState("Text")) If _text Is Nothing Then Return String.Empty Else Return _text End If End Get Set(ByVal Value As String) ViewState("Text") = Value End Set End Property Protected Overrides Sub Render(ByVal writer As HtmlTextWriter) writer.Write(Text) End Sub End Class
End Namespace
</source>
User control with readonly properties
<source lang="csharp">
<%@ Page %> <%@ Register TagPrefix="uc1" TagName="header" Src="Control.ascx" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML>
<HEAD> <title>User Controls</title> <Script language="C#" Runat="Server"> private void Page_Load(object sender, System.EventArgs e) { header1.Author = "Snoopy"; FooterLabel.Text = "Rendered " + header1.RenderDate; } </Script> </HEAD> <body> <form id="dependingdropdowns" method="post" runat="server"> <uc1:header id="header1" runat="server" Title="A Tale of Mystery"></uc1:header>
It was a dark and stormy night.
<asp:Label ID="FooterLabel" Runat="server" /> </form> </body>
</HTML> File: Control.ascx <%@ Control Language="c#" %> <script runat="server"> private string title; private string author; private DateTime renderDate = System.DateTime.Now; public string Title {
get { return title; } set { title = value; }
} public string Author {
get { return author; } set { author = value; }
} // ReadOnly public DateTime RenderDate {
get { return renderDate; }
} private void Page_Load(object sender, EventArgs e) {
TitleLabel.Text = Title; AuthorLabel.Text = Author;
} </script>