会话变量无法更新

时间:2013-05-06 05:14:16

标签: c# asp.net visual-studio-2010 session session-variables

每当我尝试更新先前输入的会话变量时,它都不会更新。

以下是我正在谈论的一个例子:

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

因此,当我第一次点击该按钮时,文本框将会更新。但是当我编辑文本并再次单击该按钮时,文本框只是恢复到第一次没有更新的状态。有人有什么想法吗?

6 个答案:

答案 0 :(得分:2)

  

所以当我第一次点击按钮时,文本框就会出现   更新。但是当我编辑文本并再次单击按钮时,   文本框只是恢复到第一次

我相信这是因为你的确如此:

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

在该代码中,您应该检查页面加载是否由回发(单击按钮)引起。所以你应该这样做:

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

答案 1 :(得分:1)

 protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        if (Session["Test"] != null && Session["Test"].ToString().Length > 0)
        {
            TextBox1.Text = Session["Test"].ToString();
        }
    }
    Session["Test"] = string.Empty;
}

protected void Button1_Click(object sender, EventArgs e)
 {
    Session["Test"] = TextBox1.Text;
  }

这是经过测试的代码。

答案 2 :(得分:0)

这样做

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
    {            
        Session["Test"] = "";           
    }
    if (Session["Test"] != null)
    {    
        Session["Test"] = ASPxTextBox1.Text;            
    }
}


protected void ASPxButton1_Click(object sender, EventArgs e)
{
    ASPxTextBox1.Text = Session["Test"].ToString();
}

答案 3 :(得分:0)

您回复了该页面,这就是为什么它会在您编写之前采用之前的值

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

在此代码中,文本框文本将使用您之前输入的先前值恢复, 所以你的代码应该是

 protected void Page_Load(object sender, EventArgs e)
    {

if(!IsPostBack)
{
if (Session["Test"] != null) 
        {
            TextBox1.Text = Session["Test"].ToString();
        }
    }
}

答案 4 :(得分:0)

这应该有效

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        if (Session["Test"] != null)
        {
            TextBox1.Text = Session["Test"].ToString();
        }
    }
}
protected void Button1_Click(object sender, EventArgs e)
{
    Session["Test"] = TextBox1.Text;
}

答案 5 :(得分:0)

您正在按钮单击之前获取Page_Load事件,因此您的Page_Load将使用Session中的先前值覆盖TextBox1.Text的值。这就是为什么它在第一次设置后永远不会改变的原因。

检查您是否没有像这样回复Page_Load上的帖子:

  protected void Page_Load(object sender, EventArgs e)
  {
     if (!IsPostBack)
     {
        TextBox1.Text = (Session["Test"] ?? "").ToString();
     }
  }

  protected void Button1_Click(object sender, EventArgs e)
  {
     Session["Test"] = TextBox1.Text;
  }

话虽如此,如果可以提供帮助,您可能希望完全避免使用Session。