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

时间:2013-10-29 20:32:52

标签: c# asp.net session-variables

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

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

这是按钮点击:

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上阅读了"How to: Read Values from Session State"

7 个答案:

答案 0 :(得分: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");
 }

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

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

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

 <asp:Button ID="Button1" runat="server" Text="Click Me!" OnClick="submit_Click" />

答案 1 :(得分:0)

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

检查此链接ASP.NET Session State Overview并特别注意无Cookie会话ID 配置会话状态上的部分。

答案 2 :(得分:0)

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

第一页

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();

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

答案 3 :(得分:0)

您是否在第一页上设置会话变量后进行重定向,如果是这样,您将无法正常工作(除非您知道诀窍)。结帐this article使其正常工作。基本上,使这项工作的方法是过载重定向方法。

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

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

答案 4 :(得分:0)

第二页

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  ";
    }
}

答案 5 :(得分:0)

您可以使用+-------------------------+ | CodeGenerated | +-------------------------+ | select * | | from tblTest | | where Age >= 25 | | and Age < 65 | | and Salary > 15000.00 | +-------------------------+ +--------+-------+-----+------------+---------------+ | TranID | FName | Age | Salary | MaritalStatus | +--------+-------+-----+------------+---------------+ | 1 | Alex | 26 | 25000,0000 | Y | | 4 | Paul | 64 | 74500,0000 | Y | +--------+-------+-----+------------+---------------+ 代替Server.Transfer()

答案 6 :(得分:-2)

对于第一页,请使用:

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