Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为会话分配文本框值_C#_Asp.net_Session_Textbox_Auto Update - Fatal编程技术网

C# 为会话分配文本框值

C# 为会话分配文本框值,c#,asp.net,session,textbox,auto-update,C#,Asp.net,Session,Textbox,Auto Update,我不明白这个简单的代码有什么问题 页面加载从用会话数据填充文本框开始 tbgiris.Text = Convert.ToString(Session["giris"]); tbmail.Text = Convert.ToString(Session["mail"]); tbisim.Text = Convert.ToString(Session["isim"]); tbgrup.Text = Convert.ToString(Session["grup"]);

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

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

    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"]);
这就是我失败的地方。会话值保持不变,不会更新。如果我在button函数中将会话值更改为静态值,例如

    Session["giris"] = "test string";
它工作正常,更新会话和文本框。但如果我试图从文本框中获取值,代码的行为就像我从未更改过文本框的文本一样


提前感谢

将此内容放在内部,因为当页面发回时,它会在会话中将相同的旧值分配给文本框,这就是您获取旧值的原因

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

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

   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"]);
    }
代码的行为就像我从未更改过文本框的文本一样

是的,但后来你又改回来了

在ASP.NET WebForms页面生命周期中,在执行事件处理程序之前,在回发上执行
page\u Load
。所以现在发生的是:

  • 页面加载中设置
    文本框
  • 显示页面
  • 更改值
  • 提交页面
  • 页面加载中设置
    文本框
    值(这就是问题所在)
  • 在事件处理程序中获取
    文本框
为了防止在回发上执行
页面加载
逻辑,您需要将其包装为一个条件:

if (!IsPostBack)
{
    // your logic here
}
这样,代码将仅在页面首次加载时执行,因此不会在每次回发时过度写入更新的值

代码的行为就像我从未更改过文本框的文本一样

是的,但后来你又改回来了

在ASP.NET WebForms页面生命周期中,在执行事件处理程序之前,在回发上执行
page\u Load
。所以现在发生的是:

  • 页面加载中设置
    文本框
  • 显示页面
  • 更改值
  • 提交页面
  • 页面加载中设置
    文本框
    值(这就是问题所在)
  • 在事件处理程序中获取
    文本框
为了防止在回发上执行
页面加载
逻辑,您需要将其包装为一个条件:

if (!IsPostBack)
{
    // your logic here
}
这样,代码将仅在页面首次加载时执行,因此不会在每次回发时过度写入更新的值