Export (0) Print
Expand All

StateManagedCollection Class

Provides a base class for all strongly typed collections that manage IStateManager objects.

System.Object
  System.Web.UI.StateManagedCollection
    More...

Namespace:  System.Web.UI
Assembly:  System.Web (in System.Web.dll)

public abstract class StateManagedCollection : IList, 
	ICollection, IEnumerable, IStateManager

The StateManagedCollection type exposes the following members.

  NameDescription
Protected methodStateManagedCollectionInitializes a new instance of the StateManagedCollection class.
Top

  NameDescription
Public propertyCountGets the number of elements contained in the StateManagedCollection collection.
Top

  NameDescription
Public methodClearRemoves all items from the StateManagedCollection collection.
Public methodCopyToCopies the elements of the StateManagedCollection collection to an array, starting at a particular array index.
Protected methodCreateKnownTypeWhen overridden in a derived class, creates an instance of a class that implements IStateManager. The type of object created is based on the specified member of the collection returned by the GetKnownTypes method.
Public methodEquals(Object)Determines whether the specified Object is equal to the current Object. (Inherited from Object.)
Protected methodFinalizeAllows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public methodGetEnumeratorReturns an iterator that iterates through the StateManagedCollection collection.
Public methodGetHashCodeServes as a hash function for a particular type. (Inherited from Object.)
Protected methodGetKnownTypesWhen overridden in a derived class, gets an array of IStateManager types that the StateManagedCollection collection can contain.
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Protected methodMemberwiseCloneCreates a shallow copy of the current Object. (Inherited from Object.)
Protected methodOnClearWhen overridden in a derived class, performs additional work before the Clear method removes all items from the collection.
Protected methodOnClearCompleteWhen overridden in a derived class, performs additional work after the Clear method finishes removing all items from the collection.
Protected methodOnInsertWhen overridden in a derived class, performs additional work before the Insert(Int32, Object) or Add(Object) method adds an item to the collection.
Protected methodOnInsertCompleteWhen overridden in a derived class, performs additional work after the Insert(Int32, Object) or Add(Object) method adds an item to the collection.
Protected methodOnRemoveWhen overridden in a derived class, performs additional work before the Remove(Object) or RemoveAt(Int32) method removes the specified item from the collection.
Protected methodOnRemoveCompleteWhen overridden in a derived class, performs additional work after the Remove(Object) or RemoveAt(Int32) method removes the specified item from the collection.
Protected methodOnValidateWhen overridden in a derived class, validates an element of the StateManagedCollection collection.
Public methodSetDirtyForces the entire StateManagedCollection collection to be serialized into view state.
Protected methodSetDirtyObjectWhen overridden in a derived class, instructs an object contained by the collection to record its entire state to view state, rather than recording only change information.
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)
Top

  NameDescription
Public Extension MethodAsParallelEnables parallelization of a query. (Defined by ParallelEnumerable.)
Public Extension MethodAsQueryableConverts an IEnumerable to an IQueryable. (Defined by Queryable.)
Public Extension MethodCast<TResult>Casts the elements of an IEnumerable to the specified type. (Defined by Enumerable.)
Public Extension MethodOfType<TResult>Filters the elements of an IEnumerable based on a specified type. (Defined by Enumerable.)
Top

  NameDescription
Explicit interface implemetationPrivate propertyICollection.CountInfrastructure. Gets the number of elements contained in the StateManagedCollection collection.
Explicit interface implemetationPrivate propertyICollection.IsSynchronizedInfrastructure. Gets a value indicating whether the StateManagedCollection collection is synchronized (thread safe). This method returns false in all cases.
Explicit interface implemetationPrivate propertyICollection.SyncRootInfrastructure. Gets an object that can be used to synchronize access to the StateManagedCollection collection. This method returns null in all cases.
Explicit interface implemetationPrivate methodIEnumerable.GetEnumeratorInfrastructure. Returns an iterator that iterates through the StateManagedCollection collection.
Explicit interface implemetationPrivate methodIList.AddAdds an item to the StateManagedCollection collection.
Explicit interface implemetationPrivate methodIList.ClearInfrastructure. Removes all items from the StateManagedCollection collection.
Explicit interface implemetationPrivate methodIList.ContainsDetermines whether the StateManagedCollection collection contains a specific value.
Explicit interface implemetationPrivate methodIList.IndexOfDetermines the index of a specified item in the StateManagedCollection collection.
Explicit interface implemetationPrivate methodIList.InsertInserts an item into the StateManagedCollection collection at the specified index.
Explicit interface implemetationPrivate propertyIList.IsFixedSizeInfrastructure. Gets a value indicating whether the StateManagedCollection collection has a fixed size. This method returns false in all cases.
Explicit interface implemetationPrivate propertyIList.IsReadOnlyInfrastructure. Gets a value indicating whether the StateManagedCollection collection is read-only.
Explicit interface implemetationPrivate propertyIList.ItemInfrastructure. Gets the IStateManager element at the specified index.
Explicit interface implemetationPrivate methodIList.RemoveRemoves the first occurrence of the specified object from the StateManagedCollection collection.
Explicit interface implemetationPrivate methodIList.RemoveAtRemoves the IStateManager element at the specified index.
Explicit interface implemetationPrivate propertyIStateManager.IsTrackingViewStateGets a value indicating whether the StateManagedCollection collection is saving changes to its view state.
Explicit interface implemetationPrivate methodIStateManager.LoadViewStateRestores the previously saved view state of the StateManagedCollection collection and the IStateManager items it contains.
Explicit interface implemetationPrivate methodIStateManager.SaveViewStateSaves the changes to the StateManagedCollection collection and each IStateManager object it contains since the time the page was posted back to the server.
Explicit interface implemetationPrivate methodIStateManager.TrackViewStateCauses the StateManagedCollection collection and each of the IStateManager objects it contains to track changes to their view state so they can be persisted across requests for the same page.
Top

The StateManagedCollection class is the base class for all strongly typed collections that store IStateManager elements, including DataControlFieldCollection, ParameterCollection, StyleCollection, TreeNodeBindingCollection, and others. The StateManagedCollection collection manages its own state as well as the state of the elements it contains. Therefore, a call to SaveViewState() saves the state of the collection and the state of all the elements currently contained by the collection.

The most important methods to consider when deriving from the StateManagedCollection class are CreateKnownType, GetKnownTypes, OnValidate, SetDirty, and SetDirtyObject. The CreateKnownType and GetKnownTypes methods are used to store an index in view state for the type of a contained element. Storing an index rather than a fully qualified type name improves performance. The OnValidate method is called whenever elements of the collection are manipulated, and validates the elements according to business rules. Currently, the implementation of the OnValidate method prohibits null objects from being stored in the collection; however, you can override this method to define your own validation behavior in a derived type. The SetDirty method forces the entire collection to be serialized to view state, rather than just serializing changes made to state since the last time it was loaded. The SetDirtyObject method is an abstract method you can implement to perform this same behavior at the element level.

Security noteSecurity Note

StateManagedCollection stores assembly-qualified type names of the collection items in view state. A site visitor could decode the view state and retrieve the type name. If this scenario creates a security concern in your Web site, you can manually encrypt the type name before placing it in the view state.

The following code example demonstrates how to derive a strongly typed collection class from StateManagedCollection to contain IStateManager objects. In this example, the CycleCollection is derived to contain instances of the abstract Cycle class, which can be either Bicycle or Tricycle objects. The Cycle class implements the IStateManager interface because it stores the value of the CycleColor property in view state.


namespace Samples.AspNet.CS.Controls {

    using System;
    using System.Security.Permissions;
    using System.Collections;
    using System.ComponentModel;
    using System.Drawing;           
    using System.Web;
    using System.Web.UI;            
    //////////////////////////////////////////////////////////////
    //
    // The strongly typed CycleCollection class is a collection
    // that contains Cycle class instances, which implement the
    // IStateManager interface.
    //
    //////////////////////////////////////////////////////////////
    [AspNetHostingPermission(SecurityAction.Demand, 
        Level=AspNetHostingPermissionLevel.Minimal)]
    public sealed class CycleCollection : StateManagedCollection {

        private static readonly Type[] _typesOfCycles 
            = new Type[] { typeof(Bicycle), typeof(Tricycle) };

        protected override object CreateKnownType(int index) {
            switch(index) {
                case 0:
                    return new Bicycle();
                case 1:
                    return new Tricycle();                    
                default:
                    throw new ArgumentOutOfRangeException("Unknown Type");
            }            
        }

        protected override Type[] GetKnownTypes() {
            return _typesOfCycles;
        }

        protected override void SetDirtyObject(object o) {
            ((Cycle)o).SetDirty();
        }

    }
    //////////////////////////////////////////////////////////////
    //
    // The abstract Cycle class represents bicycles and tricycles.
    //
    //////////////////////////////////////////////////////////////
    public abstract class Cycle : IStateManager {

        protected internal Cycle(int numWheels) : this(numWheels, "Red"){ }

        protected internal Cycle(int numWheels, String color) {    
            numberOfWheels = numWheels;
            CycleColor = color;
        }

        private int numberOfWheels = 0;
        public int NumberOfWheels {
            get { return numberOfWheels; }
        }

        public string CycleColor {
            get { 
                object o = ViewState["Color"];
                return (null == o) ? String.Empty : o.ToString() ;
            }
            set {
                ViewState["Color"] = value;            
            }        
        }

        internal void SetDirty() {
            ViewState.SetDirty(true);
        }

        // Because Cycle does not derive from Control, it does not 
        // have access to an inherited view state StateBag object.
        private StateBag viewState;
        private StateBag ViewState {
            get {
                if (viewState == null) {
                    viewState = new StateBag(false);
                    if (isTrackingViewState) {
                        ((IStateManager)viewState).TrackViewState();
                    }
                }
                return viewState;
            }
        }

        // The IStateManager implementation.
        private bool isTrackingViewState;
        bool IStateManager.IsTrackingViewState {
            get {
                return isTrackingViewState;
            }
        }

        void IStateManager.LoadViewState(object savedState) {
            object[] cycleState = (object[]) savedState;

            // In SaveViewState, an array of one element is created.
            // Therefore, if the array passed to LoadViewState has 
            // more than one element, it is invalid.
            if (cycleState.Length != 1) {
                throw new ArgumentException("Invalid Cycle View State");
            }

            // Call LoadViewState on the StateBag object.
            ((IStateManager)ViewState).LoadViewState(cycleState[0]);
        }

        // Save the view state by calling the StateBag's SaveViewState
        // method.
        object IStateManager.SaveViewState() {
            object[] cycleState = new object[1];

            if (viewState != null) {
                cycleState[0] = ((IStateManager)viewState).SaveViewState();
            }
            return cycleState;
        }

        // Begin tracking view state. Check the private variable, because 
        // if the view state has not been accessed or set, then it is not  
        // being used and there is no reason to store any view state.
        void IStateManager.TrackViewState() {
            isTrackingViewState = true;
            if (viewState != null) {
                ((IStateManager)viewState).TrackViewState();
            }
        }        
    }

    public sealed class Bicycle : Cycle {

        // Create a red Cycle with two wheels.
        public Bicycle() : base(2) {}    
    }

    public sealed class Tricycle : Cycle {

        // Create a red Cycle with three wheels.
        public Tricycle() : base(3) {}
    }

}


.NET Framework

Supported in: 4, 3.5, 3.0, 2.0

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Community Additions

ADD
Show:
© 2014 Microsoft