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
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
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>
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.
Salute gonzales36
Schau mal hier rein:
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
kann man das ständige neu instanzieren nicht verhindern? Ich dachte immer das eben nur ein teil der seite durch das updatepanel neugeladen wird
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
aha ok ..das finde ich jetzt nich so gut 😛
ich denke dann bleibt mir nur eine art der zwischenspeicherung
MfG Ronny
Hallo gonzales36
Siehe hierzu:
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011