Toon posts:

[ASP.net/C#] - Na TimerEvent nieuw window met returnwaarde

Pagina: 1
Acties:

Verwijderd

Topicstarter
Op een bepaalde pagina wordt bij elke OnInit() een timer ingesteld met als interval de waarde van Session.Timeout:

code:
1
2
3
Timer timer = new Timer(10000);//(Session.Timeout*60*1000);
timer.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
timer.Enabled=true;

(staat nu om te testen op 10 seconden).

In de OnTimedEvent dient er code te komen die een venster opent waar de gebruiker wordt gevraagd of de gegevens opgeslagen moeten worden. Hiervoor heb ik een nieuwe Form gemaakt, aangezien hier ook weer een timer aan gekoppeld moet worden (na x seconden moet dat venster ook gesloten worden en teruggekeerd worden naar het inlogscherm).

Het probleem is nu eigenlijk: hoe open ik een nieuw venster? In Javascript is dat niet moeilijk, de methode ziet er nu zo uit:

code:
1
2
3
4
5
6
7
8
9
10
String scriptString = "<script language=JavaScript>\n";
scriptString += "var WinSettings = \"center:yes;resizable:no;dialogHeight:300px\";\n";
scriptString += "var MyArg = window.showModalDialog(\"ModalForm.aspx\", MyArg, WinSettings);\n";
scriptString += "if MyArg == null {\n";
scriptString += "  \n";
scriptString += "} else {\n";
scriptString += "  \n";
scriptString += "</script>\n";
if(!this.IsStartupScriptRegistered("ShowDialog"))
    Page.RegisterStartupScript("ShowDialog", scriptString);

Echter, doordat er geen PostBack plaatsvindt wordt de javascript niet uitgevoerd. Ik heb hier al een beetje rondgezocht en met hidden buttons zou ik dit wel kunnen doen. Echter, erg netjes is het niet.

Dus het probleem is nu hoe ik dat window open nadat de timer afloopt. Kan dit alleen maar met jscript? Ik heb hier al een keer eerder naar gezocht om serverside windows te openen, maar dat wil natuurlijk niet. Dus ik denk toch dat ik een postback moet triggeren op de een of andere manier, maar dat wil ik liever niet aangezien het niet echt netjes is. Iemand een betere oplossing?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je krijgt een serverside event maar je hebt de pagina al compleet naar de client verstuurd. Je kan dus geen extra code meer meesturen naar de client op het moment dat je Event getriggerd wordt. Je zult je timer dus of in JavaScript moeten bouwen of je zult iets van AJAX moeten gebruiken.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
rwb schreef op dinsdag 27 september 2005 @ 15:34:
Je krijgt een serverside event maar je hebt de pagina al compleet naar de client verstuurd. Je kan dus geen extra code meer meesturen naar de client op het moment dat je Event getriggerd wordt. Je zult je timer dus of in JavaScript moeten bouwen of je zult iets van AJAX moeten gebruiken.
Ja, dit idee had ik dus ook.... AJAX, wel eens van gehoord (bij de FF-problemen hier), geen idee wat het is. Zal daar even naar zoeken.

Hmms dat moet ik dus helemaal installeren... Wel beetje overkill lijkt me voor zo'n klein probleem B)

[ Voor 10% gewijzigd door Verwijderd op 27-09-2005 15:37 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ik weet trouwens niet in hoeverre het mogenlijk is om met ajax een dataverbinding die vanuit de server geiniteerd wordt op te zetten.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
rwb schreef op dinsdag 27 september 2005 @ 15:38:
Ik weet trouwens niet in hoeverre het mogenlijk is om met ajax een dataverbinding die vanuit de server geiniteerd wordt op te zetten.
Ja, ik heb ook geen idee...

Is er geen andere mogelijkheid? In de tussentijd ga ik even kijken naar javascript timers. Echter, daar is de waarde van de Session-variabele niet bekend, maar dat gaat wel werken door het script toe te voegen OnInit().

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het lijkt me niet dat er een andere oplossing is. Aangezien je op de Client iets wilt doen zul je daar dus ook je code moeten plaatsen. Met webpages kan je nou eenmaal niet vanuit de server iets op de client initieren. Je zult dus echt op de client iets moeten doen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
rwb schreef op dinsdag 27 september 2005 @ 15:50:
Het lijkt me niet dat er een andere oplossing is. Aangezien je op de Client iets wilt doen zul je daar dus ook je code moeten plaatsen. Met webpages kan je nou eenmaal niet vanuit de server iets op de client initieren. Je zult dus echt op de client iets moeten doen.
Ik denk het ook inderdaad :'(. Zal even met mijn stagebegeleider overleggen of dit echt noodzakelijk is :). Thanx voor de replies :)

Verwijderd

Topicstarter
Oke, ik ga nu het volgende proberen:

Serverside loopt een timer en clientside ook. Serverside m.b.v. een Timer-object, clientside m.b.v. javascript. Als de timer clientside afloopt, wordt een nieuw window getoond die de waarde yes of no teruggeeft aan de client. Gelijktijdig loopt de timer serverside af en worden alle gegevens uit Session tijdelijk opgeslagen.

Probleem is nu dat ik dus clientside weet of de gegevens ook daadwerkelijk opgeslagen moeten worden of niet. De server moet dit ook weten, zodat hij de session gaat opslaan of niet.

Ik heb 2 manieren bedacht:

Een nieuwe asp-file schrijven die een variable meekrijgt in de url. Echter, hoe kan ik dit het beste doen? Deze pagina openen in javascript en zorgen dat hij zich direct weer sluit? Of een script includen mbv <script src="new.aspx?var=value">

De huidige asp pagina reloaden en daar de variabele aan meegeven Probleem is dan dat die variabele altijd in de url blijft staan bij postbacks. Echter, veel postbacks zullen er niet gebeuren, dus deze manier lijkt mij het meest voor de handliggend.

Aangezien ik nogal nieuw ben in ASP weet ik niet wat de beste methode is.

/Edit: ik ga het denk ik afvangen in het pop-upwindow (ook een ASP-pagina). Dit moet wel lukken denk ik :).

[ Voor 11% gewijzigd door Verwijderd op 28-09-2005 15:25 ]

Pagina: 1