【问题标题】:Session variable can't be updated无法更新会话变量
【发布时间】:2013-05-06 14:41:12
【问题描述】:

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

这是我在说什么的一个例子:

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

所以当我第一次单击按钮时,文本框将被更新。但是当我编辑文本并再次单击按钮时,文本框只是恢复到第一次时的状态,即不更新。有人有什么想法吗?

【问题讨论】:

  • 您要更新哪个会话变量
  • TextBox1 将始终具有 Session["Box"] 值,您不会在代码中的任何位置更新该值,因此它不会更新
  • 你为什么不直接放弃会话。

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


【解决方案1】:

所以当我第一次单击按钮时,文本框将是 更新。但是当我编辑文本并再次单击按钮时, 文本框只是恢复到第一次的样子

我相信这是因为您正在这样做:

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

【讨论】:

    【解决方案2】:
     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;
      }
    

    这是经过测试的代码。

    【讨论】:

      【解决方案3】:

      这样做

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

      【讨论】:

        【解决方案4】:

        您的页面被回发,这就是为什么它采用您之前所写的值

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

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

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

        【讨论】:

          【解决方案5】:

          这应该可以工作

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

          【讨论】:

            【解决方案6】:

            您在单击按钮之前获得了 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。

            【讨论】:

              猜你喜欢
              • 2016-07-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-02-08
              • 2018-02-06
              • 1970-01-01
              相关资源
              最近更新 更多