ASP.NET登录,调用基类验证SESSION,基类获取不到SESSION值

inghot 2014-05-11 12:01:14
有三个页面
Default.aspx登录页面
Admin_Base.cs验证是否登录
Main.aspx登录后的页面

Default.aspx页面设置
Session["UserName"]="Ashan";

然后跳到Main.aspx页面
如果Main.aspx直接继承System.Web.UI.Page的话,是有SESSION值的(能输入Ashan)
public partial class Main : System.Web.UI.Page


现在我是想新建一个类专门用来验证是否登录,就是Admin_Base.cs,但是这个页面获取不到SESSION的值
Main.aspx页面为
public partial class Main : Admin_Base

Admin_Base.cs 代码为:
public class Admin_Base : System.Web.UI.Page, System.Web.SessionState.IRequiresSessionState
{
public Admin_Base()
{
HttpContext.Current.Response.Write(HttpContext.Current.Session["UserName"].ToString());
}
}

, System.Web.SessionState.IRequiresSessionState
(红色内容加与不加都是一样的效果)
直接就提示:
未将对象引用设置到对象的实例。

就是说Admin_Base.cs这个类获取不到SESSION值(实际上是有这个SESSION值的)
不知道是什么情况?

...全文
183 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2014-05-12
  • 打赏
  • 举报
回复
Admin_Base : System.Web.UI.Page public Admin_Base() 请注意,你继承地地是谁,webfrom有自己的生存期和调用顺序,你构造直接访问,破坏了顺序,自然有误 建议在 protected override void OnInit(EventArgs e)里编写你的代码
t101lian 2014-05-12
  • 打赏
  • 举报
回复
楼主换成上面的试一下
t101lian 2014-05-12
  • 打赏
  • 举报
回复
   HttpContext contextc = HttpContext.Current;
                HttpContext.Current.Response.Write(contextc.Session["Userid"]);
  • 打赏
  • 举报
回复
另外说句题外话。 在asp.net程序中,大量的对页面的扩展,都不适合用“父类”的方式来处理。这就好象是搭积木,你在设计时可能需要“用鼠标轻松地一拖”这样的形式为页面附加上(组合上)特定的扩展功能,这个时候你就无法把他们都堆砌在一个巨大的“父类”中。你可以使用用户控件,或者系统提供的配置方法,等等。轻易不要把这些东西弄到“父类”中。
  • 打赏
  • 举报
回复
在必要的事件处理程序中访问Session。不要在实例化方法中去访问。 我想你应该稍微学习一点asp.net的运行机制。asp.net系统会创建了页面对象之后,才把系统的Session集合中的一大堆与当前SessionID相关的单元拷贝到页面的Session集合中。你的代码必须在之后访问Session,而不是之前。

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧