将文本框值分配给会话

Assigning textbox values to session

我不明白这个简单的代码有什么问题。

页面加载从使用会话数据填充文本框开始,

    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"] = 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";

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

提前致谢

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

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

code behaves like I have never changed texts of textboxes

你做到了,但后来又改回来了。

在 ASP.NET WebForms 页面生命周期中,Page_Load 在 post 后执行 事件处理程序执行之前。所以发生的事情是:

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

为了防止您的 Page_Load 逻辑在 post-back 上执行,您将其包装在条件中:

if (!IsPostBack)
{
    // your logic here
}

这样代码只会在页面首次加载时执行,因此您不会在每个 post-back 上覆盖更新的值。