我的网站上有一个文本框:
<asp:TextBox ID="Latitude" runat="server" ClientIDMode="Static" ></asp:TextBox>
在页面加载时,我用数据库中的内容填充该文本框:
protected void Page_Load(object sender, EventArgs e)
{
Latitude.Text = thisPlace.Latitude;
}
当我想在该文本框中使用新值更新我的数据库时,它仍然使用页面加载中的数据库更新数据库:
protected void Save_Click(object sender, EventArgs e)
{
setCoordinates(Latitude.Text);
}
如何确保setCoordinates()
从文本框中检索新值,而不是从Latitude.Text = thisPlace.Latitude;
检索数据库中的初始值?
答案 0 :(得分:31)
我认为这是因为PostBack
如果您在某个按钮的点击事件文本框中调用setCoordinates()
,则新值将丢失。如果这是正确的改变Page_Load
像这样
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
Latitude.Text = thisPlace.Latitude;
}
}
答案 1 :(得分:9)
这是因为Page_Load
事件发生在调用方法setCoordinates
之前。这意味着Latitude.Text值与之前相同。
您应该更改加载函数,以便它不会始终设置文本框的初始值。
通过使用!Page.IsPostBack
更改page_load事件,唯一一次给出初始值,是页面首次加载。
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Latitude.Text = thisPlace.Latitude;
}
}
答案 2 :(得分:5)
Page_Load
。添加IsPostBack
检查以仅在首页加载时重置文本:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Latitude.Text = thisPlace.Latitude;
}
}
答案 3 :(得分:4)
检查页面是否处于回发状态,否则将在保存
之前替换该值If(!IsPostBack){
Latitude.Text = thisPlace.Latitude;
}
答案 4 :(得分:1)
您需要从请求中获取信息,而不是使用类似的属性:
var theValue = this.Context.Request[this.myTextBox.ClientID];
答案 5 :(得分:0)
如果重新加载初始值,则会发生这种情况。
if (!IsPostBack)
{
//call the function to load initial data into controls....
}