asp.net中session的读取问题

在母版页中登录存取session["username"]后,在别的页面能显示username的文字及数据;但是在使用list后,能读取争取的数据,但是文字读取不出来。
这是母版页中cs的代码:
//


protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        { 
        if(Session["username"] != null)
            { 
            this.Label1.Text = "欢迎,"+Session["username"].ToString();
                this.HyperLink6.Visible = false;
            }

        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string name = this.TextBox1.Text;
        string psw = this.TextBox2.Text;
        musicmovingDataContext db = new musicmovingDataContext();
        var results = from r in db.用户表
                      where r.用户名 == name && r.密码 == psw
                      select r;
        if (results.Count() == 0)
            Response.Write("");
        else
        {
            Session["username"] = this.TextBox1.Text.Trim();
            Response.Write("");
        }
    }
以下是另一个跳转的(含母版)页面的代码
 List<下载视图> results = new List<下载视图>();
   
    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
            string username = Session["username"].ToString();

            if (Session["username"] != null)
            {
                var results = (from r in db.下载视图
                              where r.用户名 == username 
                              select r).ToList();
                Session["username"] = results;
                this.GridView1.DataSource = results;
                this.GridView1.DataBind();
                               
            }
        }
    }
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {

        Session["username"] = results;
        this.GridView1.PageIndex = e.NewPageIndex;
        this.GridView1.DataBind();
    }

    //protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    //{
    //    int bid = Convert.ToInt32(this.GridView1.DataKeys[e.RowIndex][0].ToString());
    //    string username = Session["username"].ToString();
    //    results = (from r in db.下载视图
    //               where r.用户名 == username && r.下载编号 == bid
    //               select r).ToList();
    //    db.下载视图.DeleteAllOnSubmit(results);
    //    db.SubmitChanges();

ChatGPT尝试为您解答,仅供参考
看起来你在这个页面的 Page_Load 方法中试图将 Session["username"] 的值赋给 results 变量。然后你在 GridView1_PageIndexChanging 方法中再次将 results 赋给 Session["username"]。这就导致了在更改页面索引时,Session["username"] 变量被覆盖了。


我建议你在这个页面的 Page_Load 方法中将 Session["username"] 的值赋给一个局部变量,然后在数据绑定之前使用该局部变量。这样就可以避免将 Session["username"] 覆盖为另一个值。


例如:

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    { 
        if(Session["username"] != null)
        { 
            this.Label1.Text = "欢迎,"+Session["username"].ToString();
            this.HyperLink6.Visible = false;
        }
    }
}

protected void Button1_Click(object sender, EventArgs e)
{
    string name = this.TextBox1.Text;
    string psw = this.TextBox2.Text;
    musicmovingDataContext db = new musicmovingDataContext();
    var results = from r in db.用户表
                  where r.用户名 == name && r.密码 == psw
                  select r;
    if (results.Count() == 0)
        Response.Write("<script>alert('用户名或密码错误')</script>");
    else
    {
        Session["username"] = this.TextBox1.Text.Trim();
        Response.Write("<script>alert('登录成功');window.location='index.aspx'</script>");
    }
}

另外,你还需要注意在数据绑定之前检查 Session["username"] 是否为空。如果为空,则不应将数据绑定到 GridView 控件。

例如:

List<下载视图> results = new List<下载视图>();

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        // 检查 Session["username"] 是否为空
        if (Session["username"] != null)
        {
            // 将 Session["username"] 的值赋给局部变量
            string username = Session["username"].ToString();
            var results = (from r in db.下载视图
                          where r.用户名 == username
                          select r).ToList();
            // 不要将 results 赋值给 Session["username"]
            this.GridView1.DataSource = results;
            this.GridView1.DataBind();
        }
    }
}

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    // 不要将 results 赋值给 Session["username"]
    this.GridView1.PageIndex = e.NewPageIndex;
    this.GridView1.DataBind();
}

//protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
//{
//