Laden...

Variable wird ständig Neu deklariert!

Erstellt von gonzales36 vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.763 Views
G
gonzales36 Themenstarter:in
5 Beiträge seit 2009
vor 14 Jahren
Variable wird ständig Neu deklariert!

Hallo,

ich bastel gerade an einer asp.net web applikation mit Visual Studio 2008. Ich habe ein labelfeld das über das Updatepanel und einem Timer akualisiert wird. In diesem Labelfeld will ich einfach zum testen einen Zähler laufen lassen, so das er mir 1 2 3 usw. ausgibt. Das Problem ist jetzt das ständig meine Zählvariable neu deklariert wird und somit imma nur 1 ausgegeben wird.

Was kann ich tun? Jedes mal wenn der Timer das Updatepanel aktualisiert bzw. die Zählfunktion ausführt wird auch gleichzeit die deklaration der variablen neugestartet quasi.

MfG Ronny

C
52 Beiträge seit 2008
vor 14 Jahren

Also generell wäre der zugehörige Code ganz hilfreich, aber ich vermute fast das du die variable innerhalb des Timers/der Scope oder was auch immer du benutzt deklarierst. einfach die initialisierung vor dem aufruf des Timers/Scope machen und innerhalb des Timers/Scope diese variable hochzählen und überschreiben. das wär jetzt so mein erster einfall. Aber wie gesagt mit dem zugehörigen code wärs natürlich einfacher zu analysieren

greetz
Craze

G
gonzales36 Themenstarter:in
5 Beiträge seit 2009
vor 14 Jahren

Also der C# Code sieht so aus und danach folgt die dazugehörige aspx datei:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Management.Instrumentation;
using System.Management;
using System.Threading;
using System.Drawing.Drawing2D;
using System.Drawing;    


namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
      
        public int j = 0; //dieser teil wird bei jedem Timer-Tick neu geladen!!


        protected void Page_Load(object sender, EventArgs e)
        {
            
           
        }

        
        
        public void zeichnen()
        {
            
            j = j + 1;
            Label4.Text = Convert.ToString(j);
            
        }


        protected void Timer1_Tick(object sender, EventArgs e)
        {
          
             zeichnen();
        
  
        }

       
    }
}

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Server Übersicht</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
    <div style="height: 360px">
        <asp:Timer ID="Timer1" runat="server" Interval="1000" ontick="Timer1_Tick">
        </asp:Timer>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">          
            <triggers>
                <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
            </triggers>
                <ContentTemplate>  
                    <asp:Label ID="Label4" runat="server" Text="Label"></asp:Label><br />
                                                     </ContentTemplate>
        </asp:UpdatePanel>
    </div>
       
    </form>
</body>
</html>

H
81 Beiträge seit 2008
vor 14 Jahren

Da die Klasse der Seite immer wieder neu instanziert wird wenn die Seite aufgerufen wird, hat die Variable jedes mal den Wert 0. Dadurch kommt bei dir immer 1 raus. Du könntest die Zahl allerdings auch zwischenspeichern. Hier würde sich z.B. die Session anbieten. Du kannst den Wert dann aus der Session lesen, hochzählen und wieder in die Session schreiben. So wirst du dann auch über 1 hinaus kommen.

5.942 Beiträge seit 2005
vor 14 Jahren

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

G
gonzales36 Themenstarter:in
5 Beiträge seit 2009
vor 14 Jahren

kann man das ständige neu instanzieren nicht verhindern? Ich dachte immer das eben nur ein teil der seite durch das updatepanel neugeladen wird

5.942 Beiträge seit 2005
vor 14 Jahren

Hallo gaonzales36

Nein, mit dem UpdatePanel durchläufst du immer den gesamten Page-Lifecycle.
Abgesehen davon ist ein "Update" des UpdatePanels sowieso immer ein neuer Request und alles fängt bei 0 an, wie im Blogpost beschrieben.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

G
gonzales36 Themenstarter:in
5 Beiträge seit 2009
vor 14 Jahren

aha ok ..das finde ich jetzt nich so gut 😛

ich denke dann bleibt mir nur eine art der zwischenspeicherung

MfG Ronny

5.942 Beiträge seit 2005
vor 14 Jahren

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011