在母版页中登录存取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)
//{
//