我有以下代码,它只是根据一些文本字段和下拉列表将记录插入数据库。下拉列表会在页面加载事件中绑定。
protected void btnAdd_Click(object sender, EventArgs e)
{
try
{
Personeel p = new Personeel();
p.achternaam = txtNaam.Text;
p.naam = txtVoornaam.Text;
p.fk_afdeling_id = Convert.ToInt16(cmbAfdeling.SelectedValue);
BLLpersoneel BLLp = new BLLpersoneel();
BLLp.insert(p);
lblFeedback.Text = "Done and done!";
rptPersoneel.DataBind();
}
catch (Exception err)
{
lblFeedback.Text = err.Message;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if(Page.IsPostBack == false)
{
BLLafdeling BLLa = new BLLafdeling();
cmbAfdeling.DataSource = BLLa.selectAll();
cmbAfdeling.DataTextField = "naam";
cmbAfdeling.DataValueField = "afdeling_id";
cmbAfdeling.DataBind();
}
}
我的问题是关于IsPostBack。 首次加载时,页面没有PostBack,因此它会将数据绑定到下拉列表“cmbAfdeling”。
然后,在提交表单时,有一个回发,所以我们没有到达if语句中的代码。对我来说,这意味着ASP.NET不会将数据绑定到组合框。
但是,提交后数据仍然存在(因此有回发)。
这是如何解释的?
谢谢!
答案 0 :(得分:2)
这是由于ViewState
。 ComboBox
中的数据存储在ViewState
中,并被发送回&{在回发期间。
这可能值得一读,以了解正在发生的事情:http://msdn.microsoft.com/en-us/library/ms972976.aspx
答案 1 :(得分:1)
它由一个名为 viewstate 的概念解释:
如果你检查你的asp生成的代码,你会发现一些隐藏的字段,其中一个是“viewstate”。 viewstate保存了asp的重要值,以便每次加载页面时都能填充元素,即使它是在回发之后。
答案 2 :(得分:0)
在回发过程中会保留数据,因为您不会在回发期间清除数据,也不会在加载时保持数据。