将文本框值分配给会话

时间:2016-03-22 16:36:47

标签: c# asp.net session textbox auto-update

我无法理解这个简单代码的错误。

页面加载从填充带有会话数据的文本框开始,

    Session["giris"] = tbgiris.Text;
    Session["mail"] = tbmail.Text;
    Session["isim"] = tbisim.Text;
    Session["grup"] = tbgrup.Text;
    Session["kimlik"] = tbkimlik.Text;
    Session["admin"] = tbadmin.Text;

    tbgiris.Text = Convert.ToString(Session["giris"]);
    tbmail.Text = Convert.ToString(Session["mail"]);
    tbisim.Text = Convert.ToString(Session["isim"]);
    tbgrup.Text = Convert.ToString(Session["grup"]);
    tbkimlik.Text = Convert.ToString(Session["kimlik"]);
    tbadmin.Text = Convert.ToString(Session["admin"]);

这很好用。然后,我在浏览器中手动编辑这些文本框值,并调用按钮功能,该功能必须简单地用文本框中的给定数据更新会话值,并重新编写文本框作为确认,

    Session["giris"] = "test string";

这是我失败的地方。会话值保持不变,不会更新。如果我将会话值更改为按钮功能中的静态值,例如

<arguments>

它工作正常,更新会话和文本框。但是,如果我尝试从文本框中获取值,代码的行为就像我从未更改过文本框的文本。

提前致谢

2 个答案:

答案 0 :(得分:2)

  

代码表现得像我从未改变过文本框的文本

你做了,但后来又把它改回来了。

在ASP.NET WebForms页面生命周期中,{/ 1}}在执行事件处理程序之前在回发上执行。所以发生了什么:

  • Page_Load
  • 中设置TextBox
  • 显示页面
  • 更改值
  • 提交页面
  • Page_Load中设置TextBox值(这是问题所在)
  • 获取事件处理程序中的Page_Load

为了防止你的TextBox逻辑在回发后执行,你可以用条件包装它:

Page_Load

这样代码只会在首次加载页面时执行,因此您不会在每次回发时覆盖更新后的值。

答案 1 :(得分:0)

把它放在里面,因为当页面回发时它会在会话中将相同的旧值分配给文本框,这就是为什么你得到旧值。

   if (!IsPostBack)
    { 
    tbgiris.Text = Convert.ToString(Session["giris"]);
    tbmail.Text = Convert.ToString(Session["mail"]);
    tbisim.Text = Convert.ToString(Session["isim"]);
    tbgrup.Text = Convert.ToString(Session["grup"]);
    tbkimlik.Text = Convert.ToString(Session["kimlik"]);
    tbadmin.Text = Convert.ToString(Session["admin"]);
    }