当前位置: 代码迷 >> ASP.NET >> 自空义控件的有关问题
  详细解决方案

自空义控件的有关问题

热度:4367   发布时间:2013-02-25 00:00:00.0
自空义控件的问题
C# code
using System;using System.Collections.Generic;using System.Text;using System.ComponentModel;using System.Web.UI;using System.Web.UI.WebControls;namespace MSPress.ServerControl{    public enum PageTrackingMode    {        ByApplication,        BySession,        ByTripTime    }    [DefaultProperty("TrackingMode")]    public class PageTracker : WebControl    {        private TimeSpan _tripTime;        [Category("Appearance")]        [DefaultValue("{0}")]        [Description("The formatting string use to display value being tracked.")]        public virtual string FormatString        {            get            {                string s = (string)ViewState["FormatString"];                return ((s == null) ? "{0}" : s);            }            set            {                ViewState["FormatString"] = value;            }        }        [Browsable(false)]        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]        public int Hits        {            get            {                PageTrackingMode mode = TrackingMode;                object o = null;                if (mode == PageTrackingMode.ByApplication)                {                    o = Page.Application[HitsKey];                }                else if (mode == PageTrackingMode.BySession)                {                    o = Page.Session[HitsKey];                }                else                {                    throw new NotSupportedException("Hits is only supported when TrackingMode is PageTrackingMode.ByApplication or PageTrackingMode.BySession");                }                return ((o == null) ? 0 : (int)o);            }        }        [Category("Behavior")]        [DefaultValue(PageTrackingMode.ByApplication)]        [Description("Thy type of tracking to perform.")]        public virtual PageTrackingMode TrackingMode        {            get            {                object mode = ViewState["TrackingMode"];                return ((mode == null) ? PageTrackingMode.ByApplication : (PageTrackingMode)mode);            }            set            {                if (value < PageTrackingMode.ByApplication || value > PageTrackingMode.ByTripTime)                {                    throw new ArgumentOutOfRangeException("value");                }                ViewState["TrackingMode"] = value;                switch (TrackingMode)                {                    case PageTrackingMode.ByApplication:                        if (Page != null && Page.Application != null)                        {                            Page.Application.Remove(HitsKey);                        }                        break;                    case PageTrackingMode.BySession:                        if (Page != null && Page.Session != null)                        {                            Page.Session.Remove(HitsKey);                        }                        break;                    case PageTrackingMode.ByTripTime:                        ViewState.Remove("TimeStamp");                        break;                }            }        }        [Browsable(false)]        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]        public TimeSpan TripTime        {            get            {                if (TrackingMode != PageTrackingMode.ByTripTime)                {                    throw new NotSupportedException("TripTime is only supported when TrackingMode is PageTrackingMode.ByTripTime");                }                return _tripTime;            }        }        protected override HtmlTextWriterTag TagKey        {            get            {                return HtmlTextWriterTag.Div;            }        }        private string HitsKey        {            get            {                return Page.GetType().FullName;            }        }        protected override void OnLoad(EventArgs e)        {            base.OnLoad(e);            switch (TrackingMode)            {                case PageTrackingMode.ByApplication:                    lock (Page.GetType())                    {                        Page.Application[HitsKey] = Hits + 1;                    }                    break;                case PageTrackingMode.BySession:                    Page.Session[HitsKey] = Hits + 1;                    break;                case PageTrackingMode.ByTripTime:                    object timeStamp = ViewState["TimeStamp"];                    DateTime requestTime = Context.Timestamp;                    if (timeStamp == null)                    {                        _tripTime = TimeSpan.Zero;                        this.Visible = false;                    }                    else                    {                        this.Visible = true;                        _tripTime = (requestTime - (DateTime)timeStamp);                    }                    ViewState["Timestamp"] = requestTime;                    break;            }        }        protected override void RenderContents(HtmlTextWriter writer)        {            switch (TrackingMode)            {                case PageTrackingMode.ByApplication:                case PageTrackingMode.BySession:                    writer.Write(FormatString, Hits);                    break;                case PageTrackingMode.ByTripTime:                    writer.Write(FormatString, TripTime.TotalSeconds);                    break;            }        }    }}
  相关解决方案