AppCode的cs文件中获得HttpContext,操作Session、Request、Response、Server等

     今天在将一些页面公用的代码抽取到App_Code的cs文件的静态方法中,其中有用到Session和Response对象,哪知怎么也添加不了Session和Resonse的引用,于是像普通页面一样继承System.Web.UI.Page,但发现用到Session和Response的地方总是出现波浪线,提示错误!发现原来Session和Response并不是Page中的静态变量。

     于是便将页面Page对象作为参数传入静态方法,如下

     public static object getSession(System.Web.UI.Page page);可以使用page.Session["sessionName"]获得Seesion值

     在调用该方法的页面中传入this,如

     object tmp = getSession(this);

     发现如果调用该方法的页面继承了System.Web.UI.Page是可以的,然而如果是用户控件就不可以了,但用户控件中的确有Session对象。于是便想传入一个Page和UserControl都继承的类或接口,发现System.Web.UI.Page和System.Web.UI.UserControl都继承了TemplateControl,于是便将方法原型修改如下:

      public static object getSession(TemplateControl tc);

      发现tc.Session["sessionName"]竟然是错误的。

      没办法只能百度了。终于找到一些文章,说可以使用HttpContext操作Session。自己动手实践了一下,发现果然可以。见下面简单的例子。

      1. 在Default.aspx.cs的Page_Load函数中写Session

         protected void Page_Load(object sender, EventArgs e)
        {
            Session["testName"] = "Hello World!";
            Response.Redirect("testPage.aspx");
        }

       2. 添加一个类Common.cs,读取Session值

         public static object GetSession(string SessionName)
        {
             return HttpContext.Current.Session[SessionName];     
        }

        3. 在testPage.aspx.cs中调用GetSession方法显示Session

         protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(Common.GetSession("testName").ToString());
        }

        发现果然成功地往testPage.aspx页面写出了Seesion的值“Hello World!”

        但有些文章说要在cs文件中实现接口IRequiresSessionState才能获取得到Session的值,否则为null。但亲自实现,不用也可以,不知什么缘故。

posted @ 2010-11-17 22:23  涂墨留香  阅读(4771)  评论(0编辑  收藏  举报