将文本框值分配给会话
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 上覆盖更新的值。
我不明白这个简单的代码有什么问题。
页面加载从使用会话数据填充文本框开始,
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
中设置 - 显示页面
- 更改值
- 提交页面
- 设置
Page_Load
中的TextBox
值(就是这个问题) - 获取事件处理程序中的
TextBox
值
TextBox
值
为了防止您的 Page_Load
逻辑在 post-back 上执行,您将其包装在条件中:
if (!IsPostBack)
{
// your logic here
}
这样代码只会在页面首次加载时执行,因此您不会在每个 post-back 上覆盖更新的值。