6

我想知道使用 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阅读了“如何:从会话状态读取值” 。

4

7 回答 7

6

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

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

这应该对你有用。

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

 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" />
于 2013-10-29T20:41:50.650 回答
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();

让我知道这是否有帮助!

于 2013-10-29T20:44:41.447 回答
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  ";
    }
}
于 2014-08-03T14:30:59.277 回答
0

您发布的代码看起来不错,因此您的问题可能与设置有关。

检查此链接ASP.NET Session State Overview并特别注意关于Cookieless SessionIDs配置 Session State的部分。

于 2013-10-29T20:40:35.270 回答
0

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

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

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

于 2013-10-29T20:54:38.310 回答
0

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

于 2017-04-20T16:48:30.350 回答
-2

对于第一页,使用这个:

protected void Button1_Click(object sender, EventArgs e)
{
    string value = TextBox1.Text;
    Session["value"] = value;
    Response.Redirect("~/Sessionpage.aspx");
}
于 2014-08-03T14:27:01.897 回答