[已解决问题] 当前上下文中不存在名称"session"
提问时间: 2008-05-02 02:10
悬赏分:5 浏览:606 次

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class index : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (session["userName"] = null)        {
            Response.Write("你未注册或登录超时,请先注册或登录!");
        }
        else {
            Response.Write(Session["userName"].ToString());
        }
    }
}

 

 

错误:当前上下文中不存在名称"session"

为啥……

 

 


提问者:Michael.Z - 初学一级
最佳答案
1、你需要将你的session改为Session,注意C#是区分大小写的。
2、如果你纠正了上述错误后,还是有同样的错误出现,那么你的用法是Session中的"userName"未被添加或定义,也许是在其他页面中定义了,但当本页面直接打开而没有运行定义Session的页面“违规”访问时就会出现你反映的问题。此问题的一个解决方法是:你可以在登录页面中就加入Session.Add("userName",null)(项目中需要用到的其他Session的添加或定义,也在此页的Page_Load事件或登录成功事件方法中完成),而在其他非登录页面判断时,你将你上述代码改为如下(注意注释部分):
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class index : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
     if (Session.Count==0)//因为所有添加的Session都在登录页,所以只要Session为空,则说明用户未打开登录页或未登录成功就跳转到了本页面,此时Session.Count肯定是等于0了,里面没用Session的Add方法添加任何一个Session对象,包括需要用到的"userName"。
    {
        Response.Write("你未注册或登录超时,请先注册或登录!");
    }
    else
    {
        if (Session["userName"] == null)        {
            Response.Write("你未注册或登录超时,请先注册或登录!");
        }
        else {
            Response.Write(Session["userName"].ToString());
        }
    }
    }
}

另一个解决方法是(仍然注意注释部分):
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class index : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        try//尝试判断Session中的值
        {
        if (Session["userName"] == null)        {
            Response.Write("你未注册或登录超时,请先注册或登录!");
        }
        else {
            Response.Write(Session["userName"].ToString());
        }
        }
        catch(Exception e)//如果try中语句有错误则进入catch
        {
            if(e.Message == "当前上下文中不存在名称\"session\"")//判断错误是否是:当前上下文中不存在名称"session",如果是则说明session未定义
            {
                  Response.Write("你未注册或登录超时,请先注册或登录!");
            }
        }
    }
}

附:其实在VS.Net中Session不用Add方法也一样可以被自动添加和使用的(不过个人用Session习惯先定义再使用,也就是先用Add方法再使用Session中的对象),所以根据你的代码及错误提示信息,我估计是因为没有区分大小写的问题,所以请将你所有写了小写的session改为Session,应该就没有问题了。
2008/5/2 3:36:56 回答者:刚刚


提问者对于答案的评价:谢谢……貌似是我自己基础知识不扎实~前天睡觉的时候想到了~
评论
2个月前   Michael.Z :
session["userName"] == null
这个小错误……
不过还是一样。。为啥……
2个月前   刚刚 :
呵呵,高手也是会有疏忽的小地方的,我也一样呀!
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除