最近发现一个怪问题
index页 有一些文章标题连接(添入DAGAGIRD)
点开后 如果没有session

if (Session["com_uname"]==null|| Session["com_uname"].ToString()=="")
{
HyperLink1.Visible=false;}login登陆后 记录session
HyperLink1.Visible=true;
问题出来了当从index直接到login的时候(请注意 这时 该站点只有一个login页)
登陆后 正常 有session HyperLink1看到了但是 如果开着index页 并且新打开login页 登陆后(请注意 这时 该站点只有2个页 index,login)
再读index页的时候 HyperLink1依然Visible=false
这是什么原因?而另外一个显示页 基本和这个一样
居然报错
----------
未将对象引用设置到对象的实例。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
HyperLink1.Visible=false;
------------------------------------------------
附显示页部分代码
private void Page_Load(object sender, System.EventArgs e)
{

if (Session["com_uname"]==null|| Session["com_uname"].ToString()=="")
{

HyperLink1.Visible=false;
HyperLink2.Visible=false;
}


string newsid = Request.QueryString["uname"].ToString().Trim();
SqlConnection MyConnection =new SqlConnection(ConfigurationSettings.AppSettings["cnFriends.ConnectionString"]);
string strSel1 = "UPDATE person SET click=click+1 WHERE uname='"+newsid+"'";
SqlCommand myCommand= new SqlCommand("proc_per_list",MyConnection);
myCommand.CommandType=CommandType.StoredProcedure;
SqlParameter uid=new SqlParameter("@uname",SqlDbType.VarChar,10);
uid.Value=newsid;
myCommand.Parameters.Add(uid); SqlDataAdapter myAdapter = new SqlDataAdapter(myCommand); 
MyConnection.Open();
SqlCommand myCommand1= new SqlCommand(strSel1,MyConnection);
myCommand1.ExecuteNonQuery();
myCommand.ExecuteNonQuery();
DataSet ds = new DataSet(); 
myAdapter.Fill( ds,"Table1" ); 
Repeater1.DataSource = ds.Tables["Table1"].DefaultView; 
Repeater1.DataBind(); 
             string strSel = "Select * from person where uname='"+newsid+"'";
SqlCommand myCommand2= new SqlCommand(strSel,MyConnection);
SqlDataReader dr = myCommand2.ExecuteReader();
if (dr.Read()==true)
{
string id=dr["id"].ToString();
string uname=dr["uname"].ToString();
dr.Close();
HyperLink1.NavigateUrl="company1/addfav.aspx?id="+id;
HyperLink2.NavigateUrl="company1/MAIL_SEND.aspx?reid="+uname; }
dr.Close();
MyConnection.Close();

解决方案 »

  1.   

    从login页到index页,虽然有Session,但是index页面不能刷新,所以false。
      

  2.   

    在写Page_Load()方法时,最好习惯性的用到IsPostBack这个属性,这对你有帮助。
      

  3.   

    同意楼上 这样:
    if (!Page.IsPostBack)
    {
       ...你的代码
    }
      

  4.   

    Page.IsPostBack表示是否提交状态
      

  5.   

    private void Page_Load(object sender, System.EventArgs e)
    {

    if(!this.IsPostBack)
    {
    if (Session["per_uname"]==null|| Session["per_uname"].ToString()=="")
    {

    HyperLink1.Visible=false;
    HyperLink2.Visible=false;
    }


    string newsid = Request.QueryString["uname"].ToString().Trim();
    SqlConnection MyConnection =new SqlConnection(ConfigurationSettings.AppSettings["cnFriends.ConnectionString"]);
    string strSel = "Select * from zp where uname='"+newsid+"'";
    string strSel1 = "UPDATE zp SET click=click+1 WHERE name='"+newsid+"'";
    string strSe2 = "Select * from company where uname='"+newsid+"'";
    SqlCommand myCommand= new SqlCommand(strSel1,MyConnection);
    SqlDataAdapter myAdapter = new SqlDataAdapter(strSel ,MyConnection); 
    SqlDataAdapter myAdapter2 = new SqlDataAdapter(strSe2 ,MyConnection);
    MyConnection.Open();
                     myCommand.ExecuteNonQuery(); DataSet ds = new DataSet(); 
    myAdapter.Fill( ds,"Table1" ); 
    myAdapter2.Fill( ds,"Table2" );  Repeater1.DataSource = ds.Tables["Table1"].DefaultView; 
    Repeater1.DataBind(); 
    Repeater2.DataSource = ds.Tables["Table2"].DefaultView; 
    Repeater2.DataBind(); 


    SqlCommand myCommand1= new SqlCommand(strSel,MyConnection);
    SqlDataReader dr = myCommand1.ExecuteReader();
    if (dr.Read()==true)
    {
    string id=dr["id"].ToString();
    string uname=dr["uname"].ToString();
    dr.Close();
    HyperLink1.NavigateUrl="person/addfav.aspx?id="+id;
    HyperLink2.NavigateUrl="person/MAIL_SEND.aspx?reid="+uname; }
    dr.Close();
    MyConnection.Close();
    }
    }问题依然
    1 index 到login后 在从login到index 到显示页list 正常
    2 新打开个窗口 粘贴index的URL到显示页 就不正常 (此时候有两个index) 而且问题怪就怪在
    ******* ******* ******* ******* ******* ******* 
    如果先以1的方式 显示了list 页后 
    2 打开的list覆盖1所打开的list 也正常
    但是如果先以2的方式 显示了list 页后 不正常
    此时用 1 打开的list腐败1所打开的list页  也不正常
    ******* ******* ******* ******* ******* *******