Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
ContentPlaceHolder + Timer
progi123
myCSharp.de - Member

Avatar #avatar-3317.gif


Dabei seit:
Beiträge: 71
Herkunft: Süddeutschland

Themenstarter:

ContentPlaceHolder + Timer

beantworten | zitieren | melden

Hi,

ein Timer tickt jede Sekunde und holt sich aktuelle Daten aus der Datenbank. Auf einer üblichen aspx Seite funktioniert es wunderbar. Sobald man das Ganze in einen ContentPlaceHolder plaziert, wird das Tick-Ereignis nicht mehr ausgelöst. Weiß jemand einen Rat?

<%@ Page Language="C#" MasterPageFile="~/User/UserMaster.master" AutoEventWireup="true"
    CodeFile="Karte.aspx.cs" Inherits="User_content_Karte" Title="Map" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Timer ID="Timer1" runat="server" Interval="1000" OnTick="Timer1_Tick">
            </asp:Timer>
            <asp:HiddenField ID="SomeData" runat="server" />
        </ContentTemplate>
    </asp:UpdatePanel>
    
    <iframe src="/Map.htm" frameborder="no" height="80%" scrolling="no" width="100%" />
</asp:Content>

protected void Timer1_Tick(object sender, EventArgs e)
    {
        SomeData.Value = DbData.GetSomeData();
        Page.Title = "yeha es geht"; //geht eben nicht   
    }
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von progi123 am .
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2.296

beantworten | zitieren | melden

Kannst du den Timer nicht außerhalb des ContentTemplate ablegen und die Daten dennoch im ContentTemplate ausgeben?
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,

der Timer tickt vermutlich schon, aber da er im UpdatePanel liegt, kannst Du nur im UpdatePanel aktualisieren. Da ist aber der Seitentitel nicht drin. Und da alles über Javascript läuft, siehst Du im Quelltext der Seite auch nicht, daß Dein HiddenField besetzt wird. Wenn man ins DOM schaut, müsste man es hingegen sehen.

Zwei Testvorschläge:
1. Mach mal ein Label ins UpdatePanel und schreib im Tick-Event einen Text rein, dann wird es funzen.
2. Platziere den Timer ausserhalb des UpdatePanel, dann geht das auch mit dem Titel.


Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
progi123
myCSharp.de - Member

Avatar #avatar-3317.gif


Dabei seit:
Beiträge: 71
Herkunft: Süddeutschland

Themenstarter:

beantworten | zitieren | melden

Hi,

der Versuch mit der TextBox hat funktioniert, allerdings geht es nur, wenn man die Zeile mit dem iframe entfernt. Nun läuft in der Map.htm ein JavaScript-Steuerelement mit einem Timer. Da sollte auf die aktuelle Position zugegriffen werden. Die Sessionvariable gibt den richtigen Wert in der TextBox aus. Leider kann ich aber nicht aus der Map.htm darauf zugreifen. position="<%=Account.Position%>"; hat einen leeren Wert. Wie könnte ich an die Daten rankommen?

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <contenttemplate>
        
<asp:Timer id="Timer1" runat="server" OnTick="Timer1_Tick" Interval="1000"></asp:Timer>
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>

</contenttemplate>
    </asp:UpdatePanel>
    
    <% Response.WriteFile("/LogIn/Map/Map.htm"); %>
</asp:Content>

protected void Timer1_Tick(object sender, EventArgs e)
    {
        Account.Position = DbData.GetPosition(); //Sessionvariable setzen
        TextBox1.Text = Account.Position; //funktioniert
    }

//Account.cs
public static string Position
    {
        get
        {
            bool keyFound = false;
            for (int i = 0; i < HttpContext.Current.Session.Keys.Count; i++)
            {
                if (HttpContext.Current.Session.Keys[i].Equals("Position"))
                {
                    keyFound = true;
                    break;
                }
            }

            if (keyFound)
                return (string)HttpContext.Current.Session["Position"];
            return "0.0";
        }
        set { HttpContext.Current.Session["Position"] = value; }
    }

//Map.htm
<html>
    <head>
        <script type="text/javascript">
            var position = 0.0;
            function init() 
            {
                window.setInterval("doSomething()", 1000);
            }

            function doSomething()
            {
                position="<%=Account.Position%>";
            }
            
        </script>
    </head>
    <body onload="init();">
        <div style="width:100%; height:100%" id="map"></div>
       
    </body>
    </html>
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von progi123 am .
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,
<% Response.WriteFile("/LogIn/Map/Map.htm"); %>
innerhalb des Content ist eine ganz schlechte Idee -> das schreibt das ganze Map.htm in die Response.

Du brauchst es aber auch gar nicht, die Geschichte mit dem Iframe funktioniert sobald dieser ein Endtag bekommt. Also
<iframe src="/Map.htm" frameborder="no" height="80%" scrolling="no" width="100%"></iframe>
statt
<iframe src="/Map.htm" frameborder="no" height="80%" scrolling="no" width="100%" />

udem müsste die Map.htm wohl eine Map.aspx werden, damit da drin serverseitig überhaupt was funktioniert.

Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers