2010-07-24 5 views
1

Je suis un gars PHP qui apprend un peu de .NET. Je bricoler avec le contrôle UpdatePanel pour un petit tableau de bord.Mise à jour du panneau de mise à jour ASP.NET une fois - puis ne fait rien

Dans le fichier .aspx, je suis en utilisant OnClick pour déclencher le fichier code-behind de mettre à jour l'étiquette par +1

<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
<div id="Container"> 
<asp:UpdatePanel runat="server" ID="UpdatePanel1" 
    OnLoad="UpdatePanel1_Load"> 
    <ContentTemplate> 
     <asp:Label ID="CounterOne" runat="server" Text="Label"></asp:Label> 
    </ContentTemplate> 

</asp:UpdatePanel> 

<asp:Button ID="Button1" runat="server" Text="Button" OnClick="UpdatePanel1_Increment"/> 

Cependant, quand je le lance sur localhost. Il incrémente la première fois que j'appuie sur le bouton, mais chaque clic suivant ne fait rien.

Voici le CodeBehind:

public void UpdatePanel1_Increment(object sender, EventArgs e) 
     { 
      counter = counter + 1; 
      CounterOne.Text = counter.ToString(); 

     } 

Ai-je besoin de réinitialiser quelque chose sur le contrôle?

Merci!

Note: Je sais qu'il ya plus de bande passante façons sympathiques à faire, mais je suis juste tester quelques idées ...

Répondre

2

Retirez le OnLoad même de l'UpdatePanel et ajoutez le code suivant avant de fermer la UpdatePanel. En ajoutant le déclencheur, vous dites à ScriptManager de mettre à jour ce UpdatePanel chaque fois que vous cliquez sur Button1.

Ce lien est une excellente introduction de www.asp.net sur la façon d'utiliser UpdatePanels et Triggers: http://www.asp.net/ajax/tutorials/understanding-asp-net-ajax-updatepanel-triggers

EDIT: Votre problème est probablement lié à la variable compteur dans UpdatePanel1_Increment. Chaque fois que vous publiez, la variable du compteur est réinitialisée à 0. Ainsi, le UpdatePanel est mis à jour correctement seulement il est mis à jour avec 0 + 1 = 1 à chaque fois. UpdatePanels crée l'illusion de mises à jour synchrones mais la mise à jour se produit en réalité de manière asynchrone et les variables ne sont pas conservées par le serveur. Vous devez indiquer au code que la nouvelle valeur du compteur a été mise à jour car la valeur du compteur est "oubliée" immédiatement après la mise à jour du UpdatePanel.

Il existe de nombreuses manières de transmettre la valeur du compteur au serveur. Un moyen rapide et facile est la suivante:

public void UpdatePanel1_Increment(object sender, EventArgs e) 
     { 
      counter = int.Parse(CounterOne.Text); //This is how we'll tell the server what the counter value currently is. 
      counter = counter + 1; 
      CounterOne.Text = counter.ToString(); 

     } 

Enfin, assurez-vous que CounterOne.Text = « 0 » lorsque la page se charge et tout fonctionnera comme vous attendez.

+0

La propriété OnClick du bouton ne doit-elle pas appeler le script dans CodeBehind et mettre à jour l'étiquette? J'ai fait vos changements recommandés, mais il n'y avait pas de changement .. – tpow

+0

Oui, vous ne devriez rien changer avec Button1. Si vous placez un point d'arrêt dans UpdatePanel1_Increment, êtes-vous capable d'atteindre le point d'arrêt? En outre, faites-vous quelque chose dans la méthode PageLoad? –

+0

Aussi, je viens de regarder de plus près votre code. Pouvez-vous partager le code de la méthode "UpdatePanel1_Load"? –

Questions connexes