为什么我的保存使用TextBox的初始值而不是输入的值?

时间:2014-01-21 15:08:15

标签: c# javascript asp.net

我的网站上有一个文本框:

<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;检索数据库中的初始值?

6 个答案:

答案 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....
}