我有一个文本框和一个按钮。在页面加载时,我从一行中选择一列并将其值放在文本框中。我有一个按钮单击方法,用文本框中的值更新相同的列/行。
我遇到的问题是,当我清除文本框中的文本时,键入新数据并点击提交新文本值未保存,它使用旧文本。
我在按钮点击方法的末尾放了一个断点,看起来asp.net正在发送文本框的旧值而不是我放入的新值。我完全被难倒了。
任何想法?
编辑:以下是完整代码:
protected void Page_Load(object sender, EventArgs e)
{
using (StoreDataContext da = new StoreDataContext())
{
var detail = from a in da.Brands
where a.BrandID == 5
select new
{
brand = a,
};
foreach (var d in detail)
{
txtEditDescription.Text = d.brand.Description;
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
using (StoreDataContext dk = new StoreDataContext())
{
Brand n = dk.Brands.Single(p => p.BrandID == 5);
n.Description = txtEditDescription.Text;
dk.SubmitChanges();
}
}
答案 0 :(得分:1)
只是为了追踪错误,请尝试放置一个标签=(lblDescription.Text)并保留其余的代码,将新值放入文本框(editdescription.text)试试并告诉我你看到了什么
foreach (var d in detail)
{
lblDescription.Text = d.brand.Description;
}
答案 1 :(得分:1)
我明白了。我应该在最初使用其值填充文本框的代码上使用if(!IsPostBack)。
然而这对我来说毫无意义。如果页面已加载且文本框文本获取值,则清除此值并尝试将其插入数据库,它应插入此值,然后当页面回发时它将从数据库中获取新值并放入文本框中的值。
它实际工作的方式使它看起来像是在回发后执行按钮点击代码之前执行页面加载代码。
答案 2 :(得分:1)
正如您所说,在Page_Load中,您正在将文本框中的原始值检索为覆盖任何更改。
是的,Page_Load在执行按钮单击(或任何其他控制事件)之前执行。在此之前我猜你已经完成了Windows Forms开发,ASP.Net web表单事件模型是完全不同的。查看ASP.NET Page Life Cycle Overview。