2009-10-10 7 views
1

Je suis nouveau sur asp.net. Je crée un site Web ASP.net en utilisant VB.net. Donc, voici mon problèmeIncrémentation des variables dans ASP.net sur le bouton cliquez sur

Dim myCounter as Integer = 0 

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles Button1.Click 

     myCounter = myCounter + 1 

     Label1.Text = myCounter.ToString() 

end Sub 

Comme prévu, je reçois toujours le texte d'étiquette comme 0 chaque fois cliquez sur le bouton. Comment créer une variable globale et l'incrémenter?

Répondre

1

La suggestion de @Rex M pour utiliser Viewstate est bonne. .

Si le compteur ne sont pas des informations sensibles ou quelque chose que vous êtes inquiet au sujet de quelqu'un falsification, voici une idée plus facile:

Vous pouvez également utiliser un <asp:HiddenField> et stocker la valeur là-bas. Ensuite, il persistera entre postbacks et vous pouvez incrémenter chaque fois ..

+0

Je suis curieux - pourquoi trouvez-vous des champs cachés plus faciles que viewstate? –

+0

Juste parce que la syntaxe pour les utiliser est similaire à la définition de la valeur dans les zones de texte et les étiquettes. Techniquement, utiliser viewstate est vraiment aussi simple, mais pour un débutant, nous ne savons pas si @Peter comprend encore viewstate. Là encore, même s'il ne comprend pas viewstate, c'est un bon moyen de l'amener à apprendre. C'est probablement une bonne idée de le diriger dans cette direction uniquement dans le but de l'aider à devenir plus équilibré. – David

0

votre classe de page est recréée à chaque requête ... ainsi myCounter n'existera pas la prochaine fois.

vous pouvez

  • make myCounter statique (pas une bonne idée)
  • le mettre dans l'application, session ou collection Cache

dépend de ce que vous essayez de

+0

pouvez-vous donner le code pour le mettre dans la collection de session et l'incrémenter sur chaque bouton cliquez sur –

+2

N'utilisez pas static!Cela ne causera rien mais la misère dans une application ASP.NET, même pour les personnes qui ne sont pas flambant neuf à elle. Certainement pour les gens qui le sont. –

4

Chaque fois que la page est publiée, elle recommence à zéro - tout élément initialisé à 0, par exemple, sera de nouveau zéro. C'est parce que le serveur ne sait rien de la dernière fois que la page a fonctionné - tout ce qu'il sait, c'est que vous avez cliqué sur un bouton qui soumet un formulaire à cette page, donc il crée une autre instance de la page et recommence.

Si vous devez persister une valeur dans postbacks, la méthode standard consiste à utiliser ViewState:

Public Property MyCounter() As Integer 
    Get 
     Dim val As Object = ViewState("MyCounter") 
     Return If(val IsNot Nothing, CInt(val), 0) 
    End Get 
    Set(ByVal value As Integer) 
     ViewState("MyCounter") = value 
    End Set 
End Property 

Il est également possible d'utiliser la session, qui persistera la valeur sur toutes les pages et les demandes de la vie de la session de l'utilisateur. Pour que cela fonctionne, vous pouvez utiliser le même exemple ci-dessus, en remplaçant ViewState par Session.

1

Son est une autre méthode qui n'utilise pas champ caché, viewstate, session ou le cache

Probablement pas quelque chose de très « sûr », mais vous permettra probablement de réduire parfois.

En supposant Label1.Text initial = 0

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles Button1.Click 

     Label1.Text = (Integer.Parse(Label1.Text) + 1).ToString() 

end Sub 
+0

Cette méthode utilise l'état d'affichage. –

+0

@Oliver Hanapp1 - Oui, cela utilise viewstate, tout comme ma réponse, mais pas d'une manière qui utilise évidemment l'état d'affichage. Quand quelqu'un me dit qu'il utilise viewstate, cela signifie pour moi qu'ils utilisent Viewstate.Add(). Techniquement, vous avez raison, bien sûr. – David

+0

Oui, il utilise viewstate indirectement, ce qui n'est pas l'utilisation implicite. –

2

Mettez ce code dans votre CLICK événement

int count=0; 

count++; 

ViewState["count"] = Convert.ToInt32(ViewState["count"]) + count; 

Label1.Text = ViewState["count"].ToString(); 
0

Vous pouvez utiliser le nombre de vues: ---

Code de cas de button_click ..

ViewState["count"] = Convert.ToInt32(ViewState["count"])+1; 
Label2.Text = "This button has been clicked " + ViewState["count"].ToString() + " times"; 
0
protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      ViewState["Count"] = 0; 
     } 

    } 

    protected void btnCount_Click(object sender, EventArgs e) 
    { 

     ViewState["Count"] = (int)(ViewState["Count"]) + 1; 
     lblCount.Text = "Page Visited " +ViewState["Count"].ToString() +" times !"; 
     //Response.Write(ViewState["Count"].ToString()); 

    } 
Questions connexes