zoukankan      html  css  js  c++  java
  • 一个SessionInterPagesHelper类 (转)挺不错的想法

    在Web应用程序中,我们经常需要在不同的Page之间传递数据,这一般都是通过Session来进行的(如果传递的数据很简单,当然也可以使用QueryString),而Session都是采用键值对存储,键是一个字符串类型,这样,我们就常常在不同的页面之间使用同一个字符串作为键来相互通信。如果项目很小,这可能没有什么问题,但是如果一个项目中有数十个页面,需要在页面之间传递的信息可能也有数十种,那么就会潜伏两个重要的隐患:(1)如果在每个页面种都通过字符串作为键来索引到对应的数据,很可能会出现键同名的问题。而且我们的cs文件中的代码也不容易维护,如果需要删除一个session数据,则需要搜索所有的page页面来找对应的键。(2)session数据的初始化地点。我们在每个使用的地方都要判断一下

    if(Session["***"] == null) ,这样简直太繁琐了。

    对于上述两个问题,我的解决方案是提供一个SessionInterPagesHelper类,如果我们需要在页面之间传递数据,那么就直接访问这个类就好了,并且SessionInterPagesHelper会自动管理session数据的初始化,我们也不用在使用之前判空了。SessionInterPagesHelper的一个简单示例如下所示:

    /// <summary>
        
    /// 用于简化对页面之间传递数据的管理
        
    /// </summary>

        public class SessionInterPagesHelper
        
    {
            
    private const string SelectedUsersList_Name = "SelectedUsersList" ; //键的名字
            private const string SelectedPicsList_Name  = "SelectedPicsList" ;//Session中的ArrayList

            
    private HttpSessionState curSession ;

            
    public SessionInterPagesHelper(HttpSessionState session)
            
    {
                
    this.curSession = session ;
            }


            
    #region SelectedUsersList
            
    //ArrayList中是User对象 ,用于在页面之间传递被选中的用户
            public ArrayList SelectedUsersList
            
    {
                
    get
                
    {
                    
    if(this.curSession[SessionContentInterPages.SelectedUsersList_Name] == null)
                    
    {
                        
    this.curSession[SessionContentInterPages.SelectedUsersList_Name] = new ArrayList() ;
                    }


                    
    return (ArrayList)this.curSession[SessionContentInterPages.SelectedUsersList_Name] ;
                }

            }


            
    public void ClearSelectedUsersList()
            
    {
                
    this.SelectedUsersList.Clear() ;
            }

            
    #endregion


            
    #region SelectedPicsList
            
    //ArrayList中是pic ID
            public ArrayList SelectedPicsList
            
    {
                
    get
                
    {
                    
    if(this.curSession[SessionContentInterPages.SelectedPicsList_Name] == null)
                    
    {
                        
    this.curSession[SessionContentInterPages.SelectedPicsList_Name] = new ArrayList() ;
                    }


                    
    return (ArrayList)this.curSession[SessionContentInterPages.SelectedPicsList_Name] ;
                }

            }


            
    public void ClearSelectedPicsList()
            
    {
                
    this.SelectedPicsList.Clear() ;
            }

            
    #endregion

        }

        这样就将需要在多个page之间维护的地方集中在一处,而且通过const string定义键名,我们可以在编译时发现重名的情况。另外可以看到,SessionInterPagesHelper已经帮我们做好的容器初始化的工作,我们只需要在一个地方向容器(比如SelectedUsersList)中添加数据,而另外一个页面从对应的容器中取数据就行了。如果你使用完了数据,而且后面也不再需要这些数据,你可以调用对应的Clear方法(如ClearSelectedUsersList)。
    原文:
    http://blog.csdn.net/zhuweisky/archive/2005/08/01/443459.aspx

  • 相关阅读:
    hdu 3996
    poj 3189
    poj 2391
    zoj 3165
    【Visual Studio】
    httpwebrequest Winform 上传图片
    [MVC] win7 下 配置 IIS 问题
    win7 下 升级 vs2008
    [Visual Studio 2010] NET 4.0 WinForm无法引用System.Web.dll的解决方法
    [XML] XML
  • 原文地址:https://www.cnblogs.com/dagon007/p/217511.html
Copyright © 2011-2022 走看看