看到在状态保持方面,尤其是需要在多页间进行状态保持的Stage,多了一种比较好的选择,特别是在创建Wizard Style WebApplication的时候


原文地址: http://www.codeproject.com/aspnet/ProcessContext.asp


  1关于Alex 的 ProcessContextusing System;
  2关于Alex 的 ProcessContextusing System.Web;
  3关于Alex 的 ProcessContextusing System.Web.UI;
  4关于Alex 的 ProcessContextusing System.Collections;
  5关于Alex 的 ProcessContext
  6关于Alex 的 ProcessContextnamespace Base4.Web.UI
  7{
  8
  9关于Alex 的 ProcessContext    /// This class allows you to move data around (without using a database) between Postbacks and Redirects
 10关于Alex 的 ProcessContext    /// that are part of the same process and working with the same data.
 11关于Alex 的 ProcessContext    /// </summary>
 12关于Alex 的 ProcessContext    public class ProcessContext
 13{
 14关于Alex 的 ProcessContext        public static ProcessContext Current
 15{
 16关于Alex 的 ProcessContext            get
 17{
 18关于Alex 的 ProcessContext                //The overhead of creating a ProcessContext is minimal since it is just a proxy to the real data
 19关于Alex 的 ProcessContext                //the reason we cache it in the HttpContext is that if we construct a new ProcessContext on each
 20关于Alex 的 ProcessContext                //Call to ProcessContext.Current then we call RegisterHiddenField more than once per request
 21关于Alex 的 ProcessContext                //which is dangerous关于Alex 的 ProcessContext as we may end up storing our data against the wrong ID!
 22关于Alex 的 ProcessContext                ProcessContext current = HttpContext.Current.Items["__PROCESSCONTEXT"as ProcessContext;
 23关于Alex 的 ProcessContext                if (current == null)
 24{
 25关于Alex 的 ProcessContext                    current = new ProcessContext();
 26关于Alex 的 ProcessContext                    HttpContext.Current.Items["__PROCESSCONTEXT"= current;
 27关于Alex 的 ProcessContext                }
 28关于Alex 的 ProcessContext                return current;    
 29关于Alex 的 ProcessContext            }
 30关于Alex 的 ProcessContext        }
 31关于Alex 的 ProcessContext        public static string CurrentProcessID
 32{
 33关于Alex 的 ProcessContext            get
 34{
 35关于Alex 的 ProcessContext                return Current.ProcessID;
 36关于Alex 的 ProcessContext            }
 37关于Alex 的 ProcessContext        }
 38关于Alex 的 ProcessContext        protected string _processID = null;
 39关于Alex 的 ProcessContext        protected Hashtable _items = null;
 40关于Alex 的 ProcessContext
 41
 42关于Alex 的 ProcessContext        /// When the ProcessContext is constructed so postbacks function okay without a QUERYSTRING
 43关于Alex 的 ProcessContext        /// redirect this Registers a Hidden Field to store the ProcessID in the form.
 44关于Alex 的 ProcessContext        /// </summary>
 45关于Alex 的 ProcessContext        protected ProcessContext()
 46{
 47关于Alex 的 ProcessContext            (HttpContext.Current.Handler as Page).RegisterHiddenField("__PROCESSID",ProcessID);
 48关于Alex 的 ProcessContext        }
 49
 50关于Alex 的 ProcessContext        /// Accesses the Hashtable associated with this ProcessContext.
 51关于Alex 的 ProcessContext        /// It creates a new Hashtable if not found. The Hashtable is stored in the users Session
 52关于Alex 的 ProcessContext        /// keyed on the ProcessContext.ProcessID
 53关于Alex 的 ProcessContext        /// </summary>
 54关于Alex 的 ProcessContext        public Hashtable Items
 55{
 56关于Alex 的 ProcessContext            get
 57{
 58关于Alex 的 ProcessContext                if (_items == null)
 59{
 60关于Alex 的 ProcessContext                    _items = HttpContext.Current.Session[ProcessID] as Hashtable;
 61关于Alex 的 ProcessContext                    if (_items == null
 62{
 63关于Alex 的 ProcessContext                        _items = new Hashtable();
 64关于Alex 的 ProcessContext                        HttpContext.Current.Session[ProcessID] = _items;
 65关于Alex 的 ProcessContext                    }
 66关于Alex 的 ProcessContext                }
 67关于Alex 的 ProcessContext                return _items;
 68关于Alex 的 ProcessContext            }
 69关于Alex 的 ProcessContext        }
 70
 71关于Alex 的 ProcessContext        /// Figures out what the ProcessID of the current ProcessContext is
 72关于Alex 的 ProcessContext        /// Checking in order -> QueryString, __PROCESSID field, or creating a new GUID
 73关于Alex 的 ProcessContext        /// </summary>
 74关于Alex 的 ProcessContext        public string ProcessID
 75{
 76关于Alex 的 ProcessContext            get
 77{
 78关于Alex 的 ProcessContext                if (_processID == null)
 79{
 80关于Alex 的 ProcessContext                    _processID = HttpContext.Current.Request.QueryString["ProcessID"as string;
 81关于Alex 的 ProcessContext                    if (_processID == null)
 82{
 83关于Alex 的 ProcessContext                        _processID = HttpContext.Current.Request.Form["__PROCESSID"as string;
 84关于Alex 的 ProcessContext                        if (_processID == null)
 85{
 86关于Alex 的 ProcessContext                            _processID = Guid.NewGuid().ToString();
 87关于Alex 的 ProcessContext                        }
 88关于Alex 的 ProcessContext                    }
 89关于Alex 的 ProcessContext                }
 90关于Alex 的 ProcessContext                return _processID;
 91关于Alex 的 ProcessContext            }
 92关于Alex 的 ProcessContext        }
 93
 94关于Alex 的 ProcessContext        /// Convenience access to this.Items[key] using this[key]
 95关于Alex 的 ProcessContext        /// </summary>
 96关于Alex 的 ProcessContext        public object this[object key]
 97{
 98关于Alex 的 ProcessContext            get
 99{
100关于Alex 的 ProcessContext                return Items[key];
101关于Alex 的 ProcessContext            }
102关于Alex 的 ProcessContext            set
103{
104关于Alex 的 ProcessContext                Items[key] = value;
105关于Alex 的 ProcessContext            }
106关于Alex 的 ProcessContext        }
107
108关于Alex 的 ProcessContext        /// Used to discard all data associated with this process
109关于Alex 的 ProcessContext        /// </summary>
110关于Alex 的 ProcessContext        public void Discard()
111{
112关于Alex 的 ProcessContext            HttpContext.Current.Session.Remove(ProcessID);
113关于Alex 的 ProcessContext        }
114
115关于Alex 的 ProcessContext        /// Used to empty the hashtable associated with this process
116关于Alex 的 ProcessContext        /// </summary>
117关于Alex 的 ProcessContext        public void Clear()
118{
119关于Alex 的 ProcessContext            Items.Clear();
120关于Alex 的 ProcessContext        }
121
122关于Alex 的 ProcessContext        /// Used to decorate a URL with the ProcessID so the ProcessContext
123关于Alex 的 ProcessContext        /// can be transfered to that URL
124关于Alex 的 ProcessContext        /// </summary>
125关于Alex 的 ProcessContext        /// <param name="url"></param>
126关于Alex 的 ProcessContext        public string AttachProcessToUrl(string url)
127{
128关于Alex 的 ProcessContext            if (url.IndexOf("?"== -1
129关于Alex 的 ProcessContext                url = url + "?";
130关于Alex 的 ProcessContext            else
131关于Alex 的 ProcessContext                url = url + "&";
132关于Alex 的 ProcessContext            url += string.Format("ProcessID={0}",ProcessID);
133关于Alex 的 ProcessContext            return url;
134关于Alex 的 ProcessContext        }
135
136关于Alex 的 ProcessContext        /// Used to redirect to the URL provided and transfer the ProcessContext
137关于Alex 的 ProcessContext        /// to that URL too.
138关于Alex 的 ProcessContext        /// </summary>
139关于Alex 的 ProcessContext        /// <param name="url"></param>
140关于Alex 的 ProcessContext        /// <param name="endRequest"></param>
141关于Alex 的 ProcessContext        public void Redirect(string url, bool endRequest)
142{
143关于Alex 的 ProcessContext            AttachProcessToUrl(url);
144关于Alex 的 ProcessContext            HttpContext.Current.Response.Redirect(url,endRequest);
145关于Alex 的 ProcessContext        }
146关于Alex 的 ProcessContext    }
147关于Alex 的 ProcessContext}
148关于Alex 的 ProcessContext



特别保留:
Thanks Alex
Cheers!

相关文章:

  • 2022-02-24
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-28
  • 2021-09-11
猜你喜欢
  • 2021-04-14
  • 2021-11-30
  • 2021-11-15
  • 2021-10-03
  • 2021-11-18
  • 2021-10-02
  • 2021-06-12
相关资源
相似解决方案