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

Tro*_*ant 6 c# asp.net session-variables

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

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

这是按钮点击:

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

这是第二页的页面加载:

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

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

dot*_*uck 6

你说你已经将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");
 }
Run Code Online (Sandbox Code Playgroud)

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

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

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

 <asp:Button ID="Button1" runat="server" Text="Click Me!" OnClick="submit_Click" />
Run Code Online (Sandbox Code Playgroud)

  • +1 ... PostBackUrl将导致submit_Click事件无法触发.此外,您可以编写:lblName.Text = Session ["name"]作为字符串,而不是空检查会话,这是一个更整洁(IMO). (2认同)