将会话变量从页面传递到页面

我想知道使用asp.net会话将变量从页面传递到页面的问题是什么。

我已经将代码删除到只有一个文本框来查看最新情况。 我只是想取一个文本框的值并将其显示在确认页面上。 单击该按钮时,它会将我转移到第二页,但标签为空白。 是的,我的post后面的url指向第二页。

这是按钮点击:

protected void submit_Click(object sender, EventArgs e) { string name = txtFirstName.Text.Trim(); Session["name"] = name; } 

这是第二页的页面加载:

 protected void Page_Load(object sender, EventArgs e) { lblName.Text = (string)(Session["name"]); } 

除非我一直在看这个并且错过了什么。 我已经从MSDN上读过“如何:从会话状态读取值” 。

你说你已经将PostBackUrl设置为第二页。 如果您要这样做,则需要使用Page.PreviousPage来访问您的文本框。 但这是最简单的方法:

首先,单独留下PostBackUrl。 将PostBackUrl设置为第二页意味着您告诉SECOND PAGE处理按钮点击,而不是第一页。 因此,您的会话变量永远不会被设置,并且在您尝试拉取它时为null。

这应该适用于你。

是的,您也可以使用QueryString执行此操作,但如果您不希望用户查看/编辑它,则会话变量更好。

  protected void submit_Click(object sender, EventArgs e) { string name = txtFirstName.Text.Trim(); Session["name"] = name; Response.Redirect("PageTwo.aspx"); } 

然后在第二页(你真的不需要ToString()):

  protected void Page_Load(object sender, EventArgs e) { if (Session["name"] != null) { lblName.Text = Session["name"].ToString(); } } 

编辑 – 确保实际触发按钮点击。 有人可以纠正我的错误,因为我在VB.NET中完成了大部分工作,而不是C#。 但是,如果您未指定OnClick值,则不会调用您的函数。

   

您发布的代码看起来很好,所以您的问题可能与设置有关。

检查此链接ASP.NET会话状态概述,并特别注意有关无Cookie 会话 ID配置会话状态的部分

我认为你没有添加会话。 这就是我的做法。

第一页

 protected void btnView_Click(object sender, EventArgs e) { foreach (ListItem li in lbxCheckDates.Items) { if (li.Selected == true) { lblMessage.Text = ""; string checkDate = lbxCheckDates.SelectedItem.Text; Session.Add("CheckDates", checkDate); Page.ClientScript.RegisterStartupScript( this.GetType(), "OpenWindow", "window.open('Paystub.aspx','_newtab');", true); } } } 

第二页

 protected void Page_Load(object sender, EventArgs e) { string checkDate = (string)(Session["CheckDates"]); //I use checkDate in sql to populate a report viewer } 

所以和你的一起,我觉得你需要……

 protected void submit_Click(object sender, EventArgs e) { string name = txtFirstName.Text.Trim(); Session.Add("Name", name); } 

我认为你在第二页中的内容应该有效,但如果没有,就像添加ToString()一样。

 lblName.Text = (string)(Session["name"]).ToString(); 

如果这有帮助,请告诉我!

您是否在第一页上设置会话变量后进行重定向,如果是这样,您将无法正常工作(除非您知道这个技巧)。 查看本文使其成功。 基本上,使这项工作的方法是过载重定向方法。

 Response.Redirect("~/newpage.aspx", false); 

false参数阻止.net终止对现有页面的处理(实际写出会话状态)

对于第二页

 protected void Page_Load(object sender, EventArgs e) { if (Session["value"] != null) { Label1.Text = Session["value"].ToString(); } else { Label1.Text = "Sorry,Please enter the value "; } } 

您可以使用Server.Transfer()而不是Response.Redirect()

对于第一页,请使用:

 protected void Button1_Click(object sender, EventArgs e) { string value = TextBox1.Text; Session["value"] = value; Response.Redirect("~/Sessionpage.aspx"); }