web-dev-qa-db-fra.com

Le texte de TextBox ne change pas dans le code derrière

donc j'ai une zone de texte sur mon site web:

<asp:TextBox ID="Latitude" runat="server" ClientIDMode="Static" ></asp:TextBox>

et au chargement de la page, je remplis cette zone de texte avec quelque chose d'une base de données:

protected void Page_Load(object sender, EventArgs e)
{
    Latitude.Text = thisPlace.Latitude;
}

Mais lorsque je veux mettre à jour ma base de données avec une nouvelle valeur dans cette zone de texte, la base de données a quand même été mise à jour avec celle placée au chargement de la page:

protected void Save_Click(object sender, EventArgs e)
{
    setCoordinates(Latitude.Text);
}

Est-ce normal? Comment puis-je m'assurer que setCoordinates () obtient la nouvelle valeur dans la zone de texte et non celle placée dans la zone de texte avec Latitude.Text = thisPlace.Latitude; ?

19
jt123

Je pense que c'est parce que PostBack

Si vous appelez setCoordinates() sur le bouton de la souris, la nouvelle valeur de l'événement de clic sera perdue. Si c'est vrai, changez Page_Load comme celui-ci

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        Latitude.Text = thisPlace.Latitude;
    }    
}
30
Jaztingo

En effet, l'événement Page_Load se produit avant que votre méthode setCoordinates soit appelée. Cela signifie que la valeur Latitude.Text est la même que précédemment.

Vous devez modifier la fonction de chargement afin qu’elle ne définisse pas toujours la valeur initiale de la zone de texte. 

En modifiant l'événement page_load avec !Page.IsPostBack, la seule fois où la valeur initiale est donnée est le premier chargement de la page.

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack) 
    {
        Latitude.Text = thisPlace.Latitude;
    }
}
9
GercoOnline

Page_Load exécuté chaque fois que la page est chargée. Ajoutez la variable IsPostBack pour réinitialiser le texte uniquement lors du chargement de la première page:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Latitude.Text = thisPlace.Latitude;
    }
}
5
PashaPash

Vérifiez si la page est en publication sinon la valeur sera remplacée avant la sauvegarde.

If(!IsPostBack){
    Latitude.Text = thisPlace.Latitude;
}
4
Steven

Vous devez obtenir les informations de la demande plutôt que d'utiliser la propriété de cette manière:

var theValue = this.Context.Request[this.myTextBox.ClientID];
1
dav_i

Cela se produit si vous chargez de nouveau les valeurs initiales. 

if (!IsPostBack)
{
    //call the function to load initial data into controls....
}
0
hmrt