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
}
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 |
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:
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
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>
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