variable initialisée dans la classe perd sa valeur précédente avec le chargement de la page
J'ai déclaré une variable Chaîne de caractères de test avec "salut". chaque fois que je clique sur le Bouton1, j'espère que le test sera ajouté à sa valeur précédente. Mais j'ai remarqué qu'il perd de sa valeur précédente lorsque le bouton est cliqué et que la page est rechargée. C'est à chaque fois que je clique dessus, il a son texte "hihi". - Je m'attendre "hihihihi" sur le cliquez sur suivant et ainsi de suite. Quel est le problème avec le code ci-dessous?
public partial class _Default : System.Web.UI.Page
{
String test = "hi";
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
test += test;
Button1.Text = test;
}
}
source d'informationauteur Md. Arafat Al Mahmud
Vous devez vous connecter pour publier un commentaire.
Non, ce n'est pas la façon asp.net des œuvres. Si vous avez besoin de ce comportement que vous devez faire:
Quand ASP.NET envoie une requête au serveur, une nouvelle version de votre classe est instanciée. Si vous avez besoin pour obtenir l'état, vous devez utiliser ViewState (ce qui est enregistré dans un champ caché dans le navigateur et envoyé avec chaque demande, et donc d'un état enregistré par page), ou vous pouvez utiliser SessionState qui est un état sauvegardé par l'utilisateur. SessionState par défaut est enregistré dans la mémoire. Donc, si vous redémarrez IIS, cet état ne dure pas. Notez que l'état d'affichage de l'état ne va PAS disparaître si vous réinitialisez IIS (car il est envoyé par le navigateur). Vous pouvez également utiliser le
Cache
qui encore une fois, est enregistré dans la mémoire. Cet état est pour tous utilisateurs de votre application. Les mêmes règles sur la réinitialisation IIS s'appliquent. Enfin, vous pourriez faire votre variable statique. Comme je l'ai dit, chaque fois qu'une demande est en fait une nouvelle version de votre classe est instanciée. Bien sûr, les variables statiques sont pas des variables d'instance, de sorte que l'état d'une variable statique est enregistré à travers les publications. Les mêmes règles sur la réinitialisation des services internet s'appliquent à des variables statiques du Cache et de la Session.Un champ n'existe que pour la durée d'une seule demande. Si vous voulez vivre entre les demandes que vous aurez à utiliser quelque chose comme l'état de session, d'afficher l'état d'un témoin, ou un formulaire HTML /valeur de la requête.
Dans la plupart des applications "réelles", vous ne pouvez même pas la garantie que par la suite, les demandes sont traitées par le même machine physique.
Chaque fois que vous visitez une page, une nouvelle instance de la page est créé avec sa propre copie de votre variable locale. Il existe plusieurs façons vous pouvez conserver les valeurs à partir d'une page vue à l'autre, et elles sont toutes décrites ici: ASP.NET Aperçu de la Gestion de l'État
C'est un privé, instance de la classe de terrain.
Vous avez besoin d'un statique, si vous voulez atteindre votre objectif.
BTW, honnêtement, peut-être que vous cherchez à utiliser une session point:
Faire de cette façon, vous aurez un code comme celui-ci dans votre gestionnaire d'événement:
C'est parce que un bouton génère un message de RETOUR vous pouvez déclarer la variable comme une Propriété Statique ou Créer une Session["Test"] ou ajouter un peu de code sur le bouton cliquez sur si IsPostback {}
N'oubliez pas que sur une publication de la asp.net recrée les objets et réaffecte les valeurs. Dans votre cas, la variable de test soit recréé et est affectée la valeur de "salut". Vous pourriez vouloir stocker la variable de session, puis ajouter de la valeur.
Le problème avec ton code, c'est qu'à chaque demande de votre
Page
instance est recréé donctest
de ne pas conserver la valeur précédente car elle appartient à une nouvellePage
instance.C'est l'écoulement:
Demande 1 Démarrez
Demande 1 Se Termine
Demande 2 Démarrer
Demande 2 Extrémités
Cela fonctionne, il suffit de l'essayer
Le problème avec ton code actuel, c'est que vous affectez une variable d'instance pour le texte du bouton, car il est une variable d'instance, il est en cours d'initialisation chaque fois que vous demandez à la page avec la même valeur c'est pourquoi vous obtenez toujours hihi seulement et pas hihihihihihihi
Chaque fois que vous cliquez sur le bouton, ASP.Net crée un
new Page()
donc latest
membre sera toujours initialisé comme:test = "hi";
.