Click here to Skip to main content
15,886,007 members
Articles / Web Development / ASP.NET

Using Control State in ASP.NET 2.0

Rate me:
Please Sign up or sign in to vote.
2.56/5 (11 votes)
23 Aug 20066 min read 106.6K   1.3K   31  
This article describes a simple approach to maintaining control state in an ASP.NET 2.0 custom web control.
Imports System
Imports System.ComponentModel
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls


<Serializable()> _
<ToolboxData("<{0}:ExampleStateControl runat=server></{0}:ExampleStateControl>")> _
Public Class ExampleStateControl
    Inherits WebControl


#Region "Declarations"

    Private mCurrentProps As New CurrentProperties

    <Serializable()> _
    Private Structure CurrentProperties
        Dim pFirstName As String
        Dim pLastName As String
        Dim pAge As Integer
        Dim pCity As String
        Dim pState As String
        Dim pCountry As String
        Dim pCitizen As Boolean
    End Structure

#End Region


#Region "Properties"

    <Browsable(True)> _
    <Category("Name")> _
    <DefaultValue("")> _
    <Localizable(True)> _
    <NotifyParentProperty(True)> _
    Public Property FirstName() As String
        Get
            Return mCurrentProps.pFirstName
        End Get
        Set(ByVal value As String)
            mCurrentProps.pFirstName = value
            SaveControlState()
        End Set
    End Property


    <Browsable(True)> _
    <Category("Name")> _
    <DefaultValue("")> _
    <Localizable(True)> _
    <NotifyParentProperty(True)> _
    Public Property LastName() As String
        Get
            Return mCurrentProps.pLastName
        End Get
        Set(ByVal value As String)
            mCurrentProps.pLastName = value
            SaveControlState()
        End Set
    End Property


    <Browsable(True)> _
    <Category("Status")> _
    <DefaultValue("")> _
    <Localizable(True)> _
    <NotifyParentProperty(True)> _
    Public Property Age() As Integer
        Get
            Return mCurrentProps.pAge
        End Get
        Set(ByVal value As Integer)
            mCurrentProps.pAge = value
            SaveControlState()
        End Set
    End Property


    <Browsable(True)> _
    <Category("Status")> _
    <DefaultValue("")> _
    <Localizable(True)> _
    <NotifyParentProperty(True)> _
    Public Property IsCitizen() As Boolean
        Get
            Return mCurrentProps.pCitizen
        End Get
        Set(ByVal value As Boolean)
            mCurrentProps.pCitizen = value
            SaveControlState()
        End Set
    End Property


    <Browsable(True)> _
    <Category("Residence")> _
    <DefaultValue("")> _
    <Localizable(True)> _
    <NotifyParentProperty(True)> _
    Public Property City() As String
        Get
            Return mCurrentProps.pCity
        End Get
        Set(ByVal value As String)
            mCurrentProps.pCity = value
            SaveControlState()
        End Set
    End Property


    <Browsable(True)> _
    <Category("Residence")> _
    <DefaultValue("")> _
    <Localizable(True)> _
    <NotifyParentProperty(True)> _
    Public Property State() As String
        Get
            Return mCurrentProps.pState
        End Get
        Set(ByVal value As String)
            mCurrentProps.pState = value
            SaveControlState()
        End Set
    End Property


    <Browsable(True)> _
    <Category("Residence")> _
    <DefaultValue("")> _
    <Localizable(True)> _
    <NotifyParentProperty(True)> _
    Public Property Country() As String
        Get
            Return mCurrentProps.pCountry
        End Get
        Set(ByVal value As String)
            mCurrentProps.pCountry = value
            SaveControlState()
        End Set
    End Property

#End Region


#Region "Methods"


    Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
        Page.RegisterRequiresControlState(Me)
        MyBase.OnInit(e)
    End Sub


    Protected Overrides Function SaveControlState() As Object
        Return Me.mCurrentProps
    End Function


    Protected Overrides Sub LoadControlState(ByVal savedState As Object)
        mCurrentProps = New CurrentProperties
        mCurrentProps = CType(savedState, CurrentProperties)
    End Sub

#End Region


#Region "Rendering"

    Protected Overrides Sub RenderContents(ByVal writer As System.Web.UI.HtmlTextWriter)

        Try
            writer.RenderBeginTag(HtmlTextWriterTag.Table)
            writer.Write("<b>Control State Properties</b><hr />")
            '''''''''''''''''''''''''''''''''''''''''''''
            writer.RenderBeginTag(HtmlTextWriterTag.Tr)

            ' first column
            writer.RenderBeginTag(HtmlTextWriterTag.Td)
            writer.Write("Name: ")
            writer.RenderEndTag()

            ' second column
            writer.RenderBeginTag(HtmlTextWriterTag.Td)
            writer.Write(mCurrentProps.pFirstName + " " + mCurrentProps.pLastName)
            writer.RenderEndTag()

            ''''''''''''''''''''''''''''''''''''''''''''
            writer.RenderBeginTag(HtmlTextWriterTag.Tr)

            ' first column
            writer.RenderBeginTag(HtmlTextWriterTag.Td)
            writer.Write("Age: ")
            writer.RenderEndTag()

            ' second column
            writer.RenderBeginTag(HtmlTextWriterTag.Td)
            writer.Write(mCurrentProps.pAge)
            writer.RenderEndTag()

            writer.RenderEndTag()

            ''''''''''''''''''''''''''''''''''''''''''''
            writer.RenderBeginTag(HtmlTextWriterTag.Tr)

            ' first column
            writer.RenderBeginTag(HtmlTextWriterTag.Td)
            writer.Write("Is Citizen:     ")
            writer.RenderEndTag()

            ' second column
            writer.RenderBeginTag(HtmlTextWriterTag.Td)
            writer.Write(mCurrentProps.pCitizen.ToString())
            writer.RenderEndTag()

            writer.RenderEndTag()

            ''''''''''''''''''''''''''''''''''''''''''''
            writer.RenderBeginTag(HtmlTextWriterTag.Tr)

            ' first column
            writer.RenderBeginTag(HtmlTextWriterTag.Td)
            writer.Write("City: ")
            writer.RenderEndTag()

            ' second column
            writer.RenderBeginTag(HtmlTextWriterTag.Td)
            writer.Write(mCurrentProps.pCity.ToString())
            writer.RenderEndTag()

            writer.RenderEndTag()


            ''''''''''''''''''''''''''''''''''''''''''''
            writer.RenderBeginTag(HtmlTextWriterTag.Tr)

            ' first column
            writer.RenderBeginTag(HtmlTextWriterTag.Td)
            writer.Write("State: ")
            writer.RenderEndTag()

            ' second column
            writer.RenderBeginTag(HtmlTextWriterTag.Td)
            writer.Write(mCurrentProps.pState.ToString())
            writer.RenderEndTag()

            writer.RenderEndTag()


            ''''''''''''''''''''''''''''''''''''''''''''
            writer.RenderBeginTag(HtmlTextWriterTag.Tr)

            ' first column
            writer.RenderBeginTag(HtmlTextWriterTag.Td)
            writer.Write("Country: ")
            writer.RenderEndTag()

            ' second column
            writer.RenderBeginTag(HtmlTextWriterTag.Td)
            writer.Write(mCurrentProps.pCountry.ToString())
            writer.RenderEndTag()

            writer.RenderEndTag()

            ''''''''''''''''''''''''''''''''''''''''''''

            writer.RenderEndTag() ' close table

        Catch ex As Exception

            writer.Write(Me.ID)

        End Try

    End Sub


#End Region



End Class

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Software Developer (Senior)
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions