/// <summary> /// Returns an object that is used by the Web page to maintain the control and view states. /// </summary> /// <returns> /// An object derived from <see cref="T:System.Web.UI.PageStatePersister"/> that supports creating and extracting the /// combined control and view states for the <see cref="T:System.Web.UI.Page"/>. /// </returns> public override PageStatePersister GetStatePersister() { PageViewStateStorageAttribute psa = Attribute.GetCustomAttribute(this.Page.GetType(), typeof(PageViewStateStorageAttribute), true) as PageViewStateStorageAttribute ?? new PageViewStateStorageAttribute(StateStorageTypes.Default); PageStatePersister psp; switch (psa.StorageType) { case StateStorageTypes.Session: psp = new SessionPageStatePersister(this.Page); break; case StateStorageTypes.InPage: psp = new HiddenFieldPageStatePersister(this.Page); break; //case StateStorageTypes.Default: default: psp = new SessionPageStatePersister(this.Page); break; } return(psp); }
// // Summary: // Deserializes and loads persisted state from the repository when // a System.Web.UI.Page object initializes its control hierarchy. // // Exceptions: // T:System.Web.HttpException: // The System.Web.UI.SessionPageStatePersister.Load method could not successfully // deserialize the state contained in the request to the Web server. public override void Load() { string viewStateKey; if (UseDefaultViewStateHiddenField) { // Get key from __VIEWSTATE hidden field HiddenFieldPageStatePersister _hiddenFiledPagePersister = new HiddenFieldPageStatePersister(Page); _hiddenFiledPagePersister.Load(); viewStateKey = _hiddenFiledPagePersister.ViewState as string; } else { // Get key from custom hidden field //string viewStateKey = Page.Request.Params[ViewStateHiddenFieldName] as string; viewStateKey = Page.Request.Form[ViewStateHiddenFieldName] as string; } if (!string.IsNullOrEmpty(viewStateKey)) { ViewStateInfo info = (ViewStateInfo)Repository.GetViewState(viewStateKey); IStateFormatter formatter = this.StateFormatter; Pair statePair = (Pair)formatter.Deserialize((string)info.Value); ViewState = statePair.First; ControlState = statePair.Second; // Remove from repository after serve } }
/// <summary> /// Возвращает PageStatePersister в зависимости он настроек ViewState mode в web.config /// </summary> /// <returns></returns> public override PageStatePersister GetStatePersister() { PageStatePersister pageStatePersister; switch (Globals.Settings.ViewState.ViewStateMode) { case ViewStateModes.Default: pageStatePersister = base.GetStatePersister(); break; case ViewStateModes.InPage: pageStatePersister = new HiddenFieldPageStatePersister(Page); break; case ViewStateModes.InSession: pageStatePersister = new SessionPageStatePersister(Page); break; case ViewStateModes.InMsSql: pageStatePersister = new StsSqlPageStatePersister(Page); break; default: throw new ArgumentOutOfRangeException(); } return(pageStatePersister); }
// // Summary: // Serializes any object state contained in the System.Web.UI.PageStatePersister.ViewState // or the System.Web.UI.PageStatePersister.ControlState property and writes the // state to the repository. public override void Save() { if (base.ViewState == null && base.ControlState == null) { return; } IStateFormatter formatter = this.StateFormatter; Pair statePair = new Pair(ViewState, ControlState); // Serialize the statePair object to a string. string serializedState = formatter.Serialize(statePair); ViewStateInfo info = new ViewStateInfo(serializedState); string viewStateKey = Page.Request.Form[ViewStateHiddenFieldName] as string; if (!string.IsNullOrEmpty(viewStateKey)) { info.Id = viewStateKey; } Repository.SaveViewState(info); if (UseDefaultViewStateHiddenField) { // Save key in __VIEWSTATE hidden field HiddenFieldPageStatePersister _hiddenFiledPagePersister = new HiddenFieldPageStatePersister(Page); _hiddenFiledPagePersister.ViewState = info.Id; _hiddenFiledPagePersister.Save(); } else { // Register hidden field to store cache key in Page.ClientScript.RegisterHiddenField(ViewStateHiddenFieldName, info.Id); } }
public ViewStatePersister(Page page, ICache cache, ITraceProvider trace) : base(page) { this.cache = cache; this.trace = trace; _hiddenFiledPagePersister = new HiddenFieldPageStatePersister(page); }