Asp.Net: Control initialisiert sich ständig neu



  • Hallo,
    Ich habe folgendes Problem:
    Ich habe folgende Klasse (gekürzt):

    public partial class PhotoViewer : System.Web.UI.UserControl
    {
    	public String Name;
    	public int Anzahl;
    	private int Current;
    	protected void Nächstes(object sender, EventArgs e)
    	{
    		Current++;
    		if (Current > Anzahl)
    		{
    			Current = 1;
    		}
    		ImageButton1.ImageUrl = "/Imgs/" + Name + (Current-1).ToString() + ".jpg";
    		Label1.Text = "Bild " + Current.ToString() + " von " + Anzahl.ToString();
    	}
    	protected void Voriges(object sender, EventArgs e)
    	{
    		Current--;
    		if (Current < 1)
    		{
    			Current = Anzahl;
    		}
    		ImageButton1.ImageUrl = "/Imgs/" + Name + (Current - 1).ToString() + ".jpg";
    		Label1.Text = "Bild " + Current.ToString() + " von " + Anzahl.ToString();
    	}
    }
    

    und dazugehörigen XAML-Code(gekürzt):

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PhotoViewer.ascx.cs"
    	Inherits="Controls.PhotoViewer" %>
    <asp:Table ID="Table1" runat="server" Height="500px" Width="500px" OnLoad="Nächstes">
    	<asp:TableRow runat="server">
    		<asp:TableCell runat="server" ColumnSpan="3" HorizontalAlign="Center">
    			<asp:ImageButton Width="100%" ID="ImageButton1" runat="server" onclick="Nächstes"/>
    		</asp:TableCell>
    	</asp:TableRow>
    	<asp:TableRow runat="server">
    		<asp:TableCell runat="server" HorizontalAlign="Left">
    			<asp:Button ID="ButtonL" runat="server" Text="Voriges" onclick="Voriges"/>
    		</asp:TableCell>
    		<asp:TableCell runat="server" HorizontalAlign="Center">
    			<asp:Label runat="server" Text="Bild 1 von 1" ID="Label1" />
    		</asp:TableCell>
    		<asp:TableCell runat="server" HorizontalAlign="Right">
    			<asp:Button ID="ButtonR" runat="server" Text="Nächstes" onclick="Nächstes"/>
    		</asp:TableCell>
    	</asp:TableRow>
    </asp:Table>
    

    Ein solches Control wird hier eigebunden:

    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    	<PhotoViewer runat="server" Name="Galerie" Anzahl="3" Width="200px" Height="200px"></PhotoViewer>
    </asp:Content>
    

    Das Control wird auch angezeigt, allerdings wird es mit jedem Button-Click neu initialisiert 😮 (Per Debugger geprüft), damit leider auch die Zählervariable "Current".

    Warum? Wie kann man das ändern?

    Danke schon im Voraus!

    mfg
    Mr. X



  • Mr X schrieb:

    und dazugehörigen XAML-Code(gekürzt):

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PhotoViewer.ascx.cs"
    	Inherits="Controls.PhotoViewer" %>
    <asp:Table ID="Table1" runat="server" Height="500px" Width="500px" OnLoad="Nächstes">
    	<asp:TableRow runat="server">
    		<asp:TableCell runat="server" ColumnSpan="3" HorizontalAlign="Center">
    			<asp:ImageButton Width="100%" ID="ImageButton1" runat="server" onclick="Nächstes"/>
    		</asp:TableCell>
    	</asp:TableRow>
    	<asp:TableRow runat="server">
    		<asp:TableCell runat="server" HorizontalAlign="Left">
    			<asp:Button ID="ButtonL" runat="server" Text="Voriges" onclick="Voriges"/>
    		</asp:TableCell>
    		<asp:TableCell runat="server" HorizontalAlign="Center">
    			<asp:Label runat="server" Text="Bild 1 von 1" ID="Label1" />
    		</asp:TableCell>
    		<asp:TableCell runat="server" HorizontalAlign="Right">
    			<asp:Button ID="ButtonR" runat="server" Text="Nächstes" onclick="Nächstes"/>
    		</asp:TableCell>
    	</asp:TableRow>
    </asp:Table>
    

    Das ist XAML? Glaub ich nicht!



  • Du weist schon das es eine Webseite ist?
    Webseiten werden Zustandslos immer wieder neu geladen.
    Wenn du Current immer wieder weitergeben möchtest dann musst du Current auf dem Seitenaufrufer zuordnen und immer wieder weitergeben.
    Da ein Webserver aber einen Seitenaufrufer nur mittels Session identifizieren kann musst Du dem User eine Session geben.

    Ändere Deine Code um

    Session["Current"] = Current;

    So speicherst Du das Current immer in der Session ab.

    zurück wieder mit

    int Current = Convert.toInt32(Session["Current"]);

    Aber bitte den Code jetzt nicht 1zu1 nehmen sondern dich mit Session befassen.



  • Ändere Deine Code um

    Session["Current"] = Current;

    So speicherst Du das Current immer in der Session ab.

    zurück wieder mit

    int Current = Convert.toInt32(Session["Current"]);

    Aber bitte den Code jetzt nicht 1zu1 nehmen sondern dich mit Session befassen.

    Danke für das Stichwort "Session". 👍


Log in to reply