关于继承的父类的构造方法中无法获取SESSION的问题

问题是这样的。我有个登录页面:Login.aspx
在这个页面中登录成功后我赋值Session["test"]="test";
然而进入另外一个页面Admin.aspx
在这个Admin.aspx.cs文件中,我把类Admin继承网站App_Code目录下的ParentClass类,如:
public partial class Admin: ParentClass
{}
而我在ParentClass的构造方法中想获取Session["test"]的值,却是空(NULL),如:
public class ParentClass
{
public ParentClass()
{
//HttpContext.Current.Response.Write(Session["test"].toString());
//执行Admin类的时候这里获不到Session["test"]
}
}

但是,如果我在Admin的方法中实例化ParentClass这个类时候就能获取到Session["test"]。

----------------------

所以我想问两个问题:
1、为什么我继续父类,在父类的构造方法中就获不到Session,而我实例化最就能打印出Session。这是为什么?
2、有什么方法能在继承父类的构造方法中获取Session?


问题点数:200 回复次数:13 显示所有回复显示星级回复显示楼主回复 修改 删除 举报 引用 回复


加为好友
发送私信
在线聊天
wtzhuwork
Work.Yzp
等级:
可用分等级:长工
总技术分:11
总技术分排名:211985

发表于:2008-05-23 23:24:291楼 得分:1
关注 沙发

修改 删除 举报 引用 回复

加为好友
发送私信
在线聊天
changjiangzhibin
面朝大海
等级:
可用分等级:富农
总技术分:14871
总技术分排名:1017

发表于:2008-05-23 23:39:102楼 得分:1
Session是应用程序域的变量,跟继承与否没关系
ASP,JSP,PHP......都是一样的

修改 删除 举报 引用 回复

加为好友
发送私信
在线聊天
Jinglecat
晓风残月
等级:
可用分等级:富农
总技术分:53001
总技术分排名:154
2
2
发表于:2008-05-24 00:15:033楼 得分:50
1.
按道理你的ParentClass 应该继承 Page 的

2.
在任何一个 Page 的类构造的时候, Session 还没有开始,
你可以检查 HttpContext.Current.Session == null

3.
通常我们不会在 Page 的 contructor 做任何初始化或者流程控制

至少需要选择在 Init 事件中

修改 删除 举报 引用 回复

加为好友
发送私信
在线聊天
Miracle
新一代的开山怪
等级:
可用分等级:小地主
总技术分:8020
总技术分排名:2460

发表于:2008-05-24 02:51:304楼 得分:15
同意3楼意见,请先研究一下Page对象的生命周期,搞清楚Page.Session是在什么时候被赋值的,你就明白到底为什么在那个ParentClass的constructor中无法访问Session了——因为这时候Page.Session属性根本还没赋值。

修改 删除 举报 引用 回复

加为好友
发送私信
在线聊天
Miracle
新一代的开山怪
等级:
可用分等级:小地主
总技术分:8020
总技术分排名:2460

发表于:2008-05-24 03:38:565楼 得分:1
不过你可以尝试一下这样。注意,对于HttpContext.Current.Session的访问也是有限制的。

public class ParentClass
{
public ParentClass()
{
HttpContext.Current.Response.Write(HttpContext.Current.Session["test"].toString());
}
}

修改 删除 举报 引用 回复

加为好友
发送私信
在线聊天
sichuan____512
无聊一族
等级:
可用分等级:短工
总技术分:0
总技术分排名:318040

发表于:2008-05-24 08:40:346楼 得分:0
该回复于2008-05-27 18:04:54被版主删除

修改 删除 举报 引用 回复

加为好友
发送私信
在线聊天
moodboy1982
老鹰
等级:
可用分等级:中农
总技术分:18045
总技术分排名:703

发表于:2008-05-24 08:49:077楼 得分:0
唉,这么多答案只有三楼的稍像样点。完全答对有分,changjiangzhibin 的答案感觉是在灌水,尽说空话。

修改 删除 举报 引用 回复

加为好友
发送私信
在线聊天
littlehand
美人卷珠帘,深坐蹙娥眉
等级:
可用分等级:贫农
总技术分:310
总技术分排名:45584

发表于:2008-05-24 09:20:358楼 得分:22
楼主,帮你实现...
---------------------

+展开
-C#
public class BaseRootPage : System.Web.UI.Page
{
    public BaseRootPage()
    {

    }
    protected override void OnLoad(EventArgs e)
    {
        object MemberID = Session["memberID"];
        if (MemberID == null)
        {
            
        }
        else
        {
            base.OnLoad(e);
        }
    }
}



修改 删除 举报 引用 回复

加为好友
发送私信
在线聊天
Miracle
新一代的开山怪
等级:
可用分等级:小地主
总技术分:8020
总技术分排名:2460

发表于:2008-05-24 21:49:219楼 得分:0
引用 7 楼 moodboy1982 的回复:
唉,这么多答案只有三楼的稍像样点。完全答对有分,changjiangzhibin 的答案感觉是在灌水,尽说空话。


原来楼主不是有问题,是在考量人啊~~~~~~~~~~~ 很有点老师考学生的意思,还有考后点评。大家等着看楼主的标准答案吧^_^

修改 删除 举报 引用 回复

加为好友
发送私信
在线聊天
honey52570
(O_O)
等级:
可用分等级:富农
总技术分:9255
总技术分排名:2093

发表于:2008-05-24 22:26:5110楼 得分:0
无聊的实现方式

修改 删除 举报 引用 回复

加为好友
发送私信
在线聊天
amandag
高歌
等级:
可用分等级:掌柜
总技术分:99666
总技术分排名:49
2
发表于:2008-05-24 22:59:1211楼 得分:100
然而进入另外一个页面Admin.aspx
==
那这个Admin本应该是继承自Page类

而又有
public partial class Admin: ParentClass
{}
==
所以你的ParentClass 又应该继承自Page

1、为什么我继续父类,在父类的构造方法中就获不到Session,而我实例化最就能打印出Session。这是为什么?
==
给你的项目添加Global.asax文件,单步调试,你会发现当构造Admin对象时,会先调用父类ParentClass的构造函数,这个当

然很正常,当页面被提交请求第一个方法永远是构造函数。这时候可以在构造函数里面初始一些自定义属性或对象,不过这时候因为页面还没有被完全初始化所以多少会有些限制。特别地,您需要使用HttpContext对象。当前可以使用的对象包括QueryString, Form以及Cookies集合,还有Cache对象。注意:在构造函数里是不允许使用Session的。


2、有什么方法能在继承父类的构造方法中获取Session?
==
首先,继承父类构造函数这种说法是错误的,不过按楼主的意思可以在基类的Page_Load事件中处理


+展开
-C#
public class ParentClass :Page
{
    public ParentClass()
    {
        
    }

    protected virtual void Page_Load(object sender, EventArgs e)
    {
        HttpContext.Current.Response.Write(Session["test"].ToString()); 
    }
}




public partial class Admin : ParentClass
{
    protected override void Page_Load(object sender, EventArgs e)
    {

    }
}



修改 删除 举报 引用 回复

加为好友
发送私信
在线聊天
lfywy
蓝色深海
等级:
可用分等级:富农
总技术分:2120
总技术分排名:10584

发表于:2008-05-24 23:06:2212楼 得分:10
给你参考一些相关资料:
http://blog.csdn.net/lifuyun/archive/2007/12/07/1922291.aspx

修改 删除 举报 引用 回复

加为好友
发送私信
在线聊天
moodboy1982
老鹰
等级:
可用分等级:中农
总技术分:18045
总技术分排名:703

发表于:2008-05-26 09:33:2813楼 得分:0
引用 8 楼 littlehand 的回复:
楼主,帮你实现...
---------------------

+展开
-C#
public class BaseRootPage : System.Web.UI.Page 

    public BaseRootPage() 
    { 

    } 
    protected override void OnLoad(EventArgs e) 
    { 
        object MemberID = Session["memberID"]; 
        if (MemberID == null
        { 
            
        } 
        else 
        { 
            base.OnLoad(e); 
        } 
    } 



没看明白你的意思。能不能详细点?

加支付宝好友偷能量挖...


评论(0)网络
阅读(111)喜欢(0)Asp.Net/C#/WCF