Hi,
ich habe eine "Default.aspx"-Seite mit einem Knopf drauf. Beim Klick auf diesen Knopf wird via Server.Transfer die nächste Seite "Test1.aspx"
aufgerufen, welche einen Timer gesteuerten Callback-Aufruf ausführt. Das funktioniert. Wenn ich jetzt in der Default-Seite eine Session-Variable definiere, um der zweiten Seite etwas mitzugeben, funktioniert das alles nicht mehr. Der Timer bleibt stehen
bzw. es gibt keine Callbacks mehr. Was mache ich falsch?
Anbei ein wenig Code:
//----------------------
// Default.aspx:
//----------------------
...
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1"
runat="server"
OnClick="Button1_Click"
Text="Button" />
</div>
</form>
...
//----------------------
// Default.aspx.cs:
//----------------------
...
protected void Button1_Click(object sender, EventArgs e)
{
//Session["Test"] = 1; <-- !!!!!!!!!!!!!!!
Server.Transfer("~/Test1.aspx");
}
...
//----------------------
// Test1.aspx:
//----------------------
...
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Unbenannte Seite</title>
</head>
<script language="javascript" type="text/javascript">
var aktiv = false;
var info;
var tim;
function btnStart_onclick()
{
aktiv = true;
info = "";
RunTimer();
return true;
}
function RunTimer()
{
if (!aktiv)
{
Ausgabe("");
return;
}
CallServer(info, "");
tim = setTimeout("RunTimer()", 1000);
}
function btnStopp_onclick()
{
aktiv = false;
clearTimeout(tim);
return true;
}
function Ausgabe(txt)
{
var zeit = new Date();
var e;
e = document.getElementById('<%=spanTimer.ClientID%>');
e.innerHTML = zeit.toLocaleTimeString();
e = document.getElementById('<%=spanLoop.ClientID%>');
e.innerHTML = txt;
}
function ReceiveServerData(rValue)
{
info = rValue;
Ausgabe(info);
}
</script>
<body>
<form id="form1" runat="server">
<div>
Timer: <span id="spanTimer" runat="server"></span>
<br />
Loop: <span id="spanLoop" runat="server"></span>
<br />
<br />
<asp:Button ID="btnStart"
runat="server"
OnClientClick="btnStart_onclick()"
OnClick="Button1_Click"
Text="Start" />
<input id="btnStopp"
type="button"
value="Timer-Stopp"
onclick="btnStopp_onclick()" />
</div>
</form>
</body>
</html>
//----------------------
// Test1.aspx.cs:
//----------------------
...
public partial class Test1
: System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
{
protected String returnValue;
private static string _info = String.Empty;
protected void Page_Load(object sender, EventArgs e)
{
String cbReference = Page.ClientScript.GetCallbackEventReference(
this, "arg", "ReceiveServerData", "context");
String callbackScript =
"function CallServer(arg, context) { " + cbReference + ";}";
Page.ClientScript.RegisterClientScriptBlock(
this.GetType(), "CallServer", callbackScript, true);
}
public void RaiseCallbackEvent(String eventArgument)
{
returnValue = _info;
}
public String GetCallbackResult()
{
return returnValue;
}
protected void Button1_Click(object sender, EventArgs e)
{
// loop 7 sec
for (int i = 0; i < 7; i++)
{
System.Threading.Thread.Sleep(1000);
_info = System.DateTime.Now.ToLongTimeString();
}
}
}
Ich habe das Projekt einmal hierhin gestellt (MyTest.zip 6 KB):
http://uploaded.to/file/r2opgw
Kann jemand helfen?
Vielen Dank schon mal.
Franz Moll