日期:2014-05-19  浏览次数:20822 次

关于程序执行与session问题,请各位指教(在线等)
程序如下:
protected   void   Page_Load(object   sender,   EventArgs   e)
{
        if(Session[ "userID "]==null)
                Response.Write( " <SCRIPT   LANGUAGE=javascript> alert( '对不起,请您先登录! ');window.location= 'login.aspx '; </SCRIPT> ");
        if(!Page.IsPostBack)
                bindData();
}
private   void   bindData()
{
        if(Session[ "userID "].ToString()== "1 ")
                Response.Write( " <SCRIPT   LANGUAGE=javascript> alert( '您是超级管理员! '); </SCRIPT> ");
}

我在Page_Load中已经判断了Session[ "userID "]是否为空,如果为空就转入 'login.aspx ',可是当运行的时候,发现不管Session[ "userID "]是否为空,bindData()方法都要执行,并且出现“未将对象引用设置到对象的实例”的错误,请大侠指教,为什么Session[ "userID "]为空,bindData函数还要执行。
谢谢!

------解决方案--------------------
if(Session[ "userID "]==null)
{
Response.Write( " <SCRIPT LANGUAGE=javascript> alert( '对不起,请您先登录! ');window.location= 'login.aspx '; </SCRIPT> ");
}
else
{
if(!Page.IsPostBack)
bindData();
}
}
------解决方案--------------------
哈哈,被说了,你写一个if... esle....判断语句不就行了
不然的话就加一个return应该也可以
protected void Page_Load(object sender, EventArgs e)
{
if(Session[ "userID "]==null)
{
Response.Write( " <SCRIPT LANGUAGE=javascript> alert( '对不起,请您先登录! ');window.location= 'login.aspx '; </SCRIPT> ");
return ;//在这里加一个return 如果出现userID为空就结束程序的执行,不让它执行下面语句。
}
if(!Page.IsPostBack)
bindData();
}
private void bindData()
{
if(Session[ "userID "].ToString()== "1 ")
Response.Write( " <SCRIPT LANGUAGE=javascript> alert( '您是超级管理员! '); </SCRIPT> ");
}


------解决方案--------------------
if(Session[ "userID "]==null)
Response.Write( " <SCRIPT LANGUAGE=javascript> alert( '对不起,请您先登录! ');window.location= 'login.aspx '; </SCRIPT> ");
if(!Page.IsPostBack)
bindData();
}

因为Response.Write并不代表程序就结束了,虽然你写了window.location= 'login.aspx ';,但这个也是要到客户端才能执行的,所以代码会一直向下走,所以会执行bindData();