Toon posts:

[ASP.net / C#] - Parent window refreshen zonder jscript

Pagina: 1
Acties:

Verwijderd

Topicstarter
Vanuit een record-overzicht wordt een detailscherm getoond van 1 record (klinkt sommigen wel bekend in de oren denk ik ;)). Hier kan de gebruiker gegevens wijzigen. M.b.v. een button wordt het venster gesloten.

Probleem is nu dat de parent (het overzicht) gerefresht moet worden.

Dit kan natuurlijk in jscript:

- m.b.v. window.reload(): dit gaat wel goed, maar er wordt een bevestiging gevraagd of het window opnieuw gesubmit moet worden, dat wil ik niet.
- m.b.v. window.location.href = window.location.href. Dit gaat niet goed. Ik gebruik panels op die pagina. Als er geen sprake is van een postback, wordt er vanuit gegaan dat het 1e panel getoond moet worden (waar een keuze moet worden gemaakt welk record-overzicht getoond moet worden). De gebruiker krijgt dus niet het record-overzicht te zien, maar weer het 1e scherm.

Ik zou wel een postback kunnen triggeren, maar dat vind ik niet netjes.

In de eventhandler van de sluit-button in het detailscherm wil ik dus eigenlijk m.b.v. Page.Response.Redirect(...) zorgen dat het parent-window gerefresht wordt. Echter, Parent.Page is null! Het window wordt geopend m.b.v. javascript (ja hier wel, aangezien dat niet op een andere manier kan). Moet ik handmatig de parent nog meegeven??

Ik heb gezocht op google met keywords als parent page redirect, maar alle code die ik vind is in jscript.

Ga ik het op deze manier wel werkend krijgen? Als ik de verkeerde weg ben ingeslagen, let me know :)

  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 24-04 23:28

mOrPhie

❤️❤️❤️❤️🤍

Ik denk dat je uit moet zoeken waarom Parent.Page null is, want de Response.Redirect is op zich de juiste manier. Maar in de code-behind heb je toch een klasse die overerft van System.Web.UI.Page? Gebruik je frames of een popup of iets dergelijks? :)

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Helaas kun je geen push forceren naar de client toe. Dit moet dus altijd vanaf de client geinitialiseerd worden en client-side heb je alleen controle over javascript.

Wat je zou kunnen doen is de location.href instellen en wat request parameters eraan toevoegen (bijvoorbeeld panelpage.aspx?gotopanel=record_overzicht) en deze vervolgens in je page_load uitlezen en verwerken.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op donderdag 13 oktober 2005 @ 12:51:
- m.b.v. window.location.href = window.location.href. Dit gaat niet goed. Ik gebruik panels op die pagina. Als er geen sprake is van een postback, wordt er vanuit gegaan dat het 1e panel getoond moet worden(waar een keuze moet worden gemaakt welk record-overzicht getoond moet worden). De gebruiker krijgt dus niet het record-overzicht te zien, maar weer het 1e scherm.
Mischien is het het makkelijkst om dat aan te passen. Eventueel met een extra paramter in de querystring dus in plaats van http://mijndomein/overzicht.aspx waar je aan de hand van de postback je panel bepaald http://mijndomein/overzicht.aspx?page=keuze
mOrPhie schreef op donderdag 13 oktober 2005 @ 13:00:
Ik denk dat je uit moet zoeken waarom Parent.Page null is, want de Response.Redirect is op zich de juiste manier. Maar in de code-behind heb je toch een klasse die overerft van System.Web.UI.Page? Gebruik je frames of een popup of iets dergelijks? :)
Hij maakt idd gebruike van een popup. Dus Parent.Page bestaat er niet want de Page heeft geen Parent.

[ Voor 25% gewijzigd door Woy op 13-10-2005 13:05 ]

“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
bigbeng schreef op donderdag 13 oktober 2005 @ 13:01:
Helaas kun je geen push forceren naar de client toe. Dit moet dus altijd vanaf de client geinitialiseerd worden en client-side heb je alleen controle over javascript.

Wat je zou kunnen doen is de location.href instellen en wat request parameters eraan toevoegen (bijvoorbeeld panelpage.aspx?gotopanel=record_overzicht) en deze vervolgens in je page_load uitlezen en verwerken.
Daar heb ik ook aan gedacht inderdaad (vergeten te vermelden). Eigenlijk vind ik dat niet echt netjes... Als het niet anders kan, zal dat wel moeten inderdaad.

/Edit: dit KAN wel, maar ik zal dan een groot stuk van mijn code moeten herschrijven (ja, ik weet het, dan was mijn code niet netjes). Ik hoop daarom ook dat er een andere oplossing is.
rwb schreef op donderdag 13 oktober 2005 @ 13:03:
[...]
Hij maakt idd gebruike van een popup. Dus Parent.Page bestaat er niet want de Page heeft geen Parent.
Wanneer is deze niet null dan? Dan zal ik dit wel verkeerd geinterpreteerd hebben, maar ik dacht dat dit dus de parent window was, d.w.z. het window dat de popup heeft gemaakt.

[ Voor 9% gewijzigd door Verwijderd op 13-10-2005 13:29 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op donderdag 13 oktober 2005 @ 13:11:
Wanneer is deze niet null dan? Dan zal ik dit wel verkeerd geinterpreteerd hebben, maar ik dacht dat dit dus de parent window was, d.w.z. het window dat de popup heeft gemaakt.
Parent is volgens mij een Property van Control. Page erft van Control dus heeft deze property ook. Parent verwijst zeker niet naar de Page waarvan hij is geopend ( Dit gebeurt tenslotte ook clientside dus de server heeft niet eens weet dat hij vanuit een andere page geopend wordt ). Bij Page zal Parent dan ook altijd NULL zijn volgens mij. Bij een Button zou Parent bijvoorbeeld naar de Panel kunnen verwijzen waarin deze is toegevoegd.
Verwijderd schreef op donderdag 13 oktober 2005 @ 13:11:
[...]
Daar heb ik ook aan gedacht inderdaad (vergeten te vermelden). Eigenlijk vind ik dat niet echt netjes... Als het niet anders kan, zal dat wel moeten inderdaad.
Je wilt je page refreshen. Dat zal op een of andere manier clientside moeten gebeuren. Een refresh gaat idd niet werken als die pagina is verkregen met een postback.

Je zult dus een url moeten hebben die de pagina die je wilt tonen uniek kan indentificeren. IMHO is dat helemaal geen lelijke oplossing maar juist de meest nette.

Je zou eventueel ook vieze dingen kunnen doen door in je javascript een postback te generenen. Maar daar zou ik zelf persoonlijk niet voor kiezen.

blijkbaar doe je nou in je page_load ( of ergens anders )

C#:
1
2
3
4
5
6
7
8
if( IsPostback )
{
    ShowPanel1();
}
else
{
    ShowPanel2();
}

Maar dat kan je dan toch ook simpel veranderen in iets als

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if( Request[ "page" ].Equals( "Panel1" ) )
{
    ShowPanel1();
}
else
{
    if( IsPostback )
    {
        ShowPanel1();
    }
    else
    {
        ShowPanel2();
    }
}

[ Voor 47% gewijzigd door Woy op 13-10-2005 13:47 ]

“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 donderdag 13 oktober 2005 @ 13:41:
[...]

Parent is volgens mij een Property van Control. Page erft van Control dus heeft deze property ook. Parent verwijst zeker niet naar de Page waarvan hij is geopend ( Dit gebeurt tenslotte ook clientside dus de server heeft niet eens weet dat hij vanuit een andere page geopend wordt ). Bij Page zal Parent dan ook altijd NULL zijn volgens mij. Bij een Button zou Parent bijvoorbeeld naar de Panel kunnen verwijzen waarin deze is toegevoegd.


[...]

Je wilt je page refreshen. Dat zal op een of andere manier clientside moeten gebeuren. Een refresh gaat idd niet werken als die pagina is verkregen met een postback.

Je zult dus een url moeten hebben die de pagina die je wilt tonen uniek kan indentificeren. IMHO is dat helemaal geen lelijke oplossing maar juist de meest nette.

Je zou eventueel ook vieze dingen kunnen doen door in je javascript een postback te generenen. Maar daar zou ik zelf persoonlijk niet voor kiezen.

blijkbaar doe je nou in je page_load ( of ergens anders )

C#:
1
2
3
4
5
6
7
8
if( IsPostback )
{
    ShowPanel1();
}
else
{
    ShowPanel2();
}

Maar dat kan je dan toch ook simpel veranderen in iets als

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if( Request[ "page" ].Equals( "Panel1" ) )
{
    ShowPanel1();
}
else
{
    if( IsPostback )
    {
        ShowPanel1();
    }
    else
    {
        ShowPanel2();
    }
}
Ik had hier een probleem mee. Het moet ook mogelijk zijn om vanaf het recordoverzicht terug te gaan naar het vorige panel mbv een button. Aangezien dan nog wel in de adresbalk de variabele blijft staan, zou dat niet gaan werken dacht ik. Dat heb ik nu zo opgelost:

C#:
1
2
3
4
5
6
7
8
9
10
11
if (!this.Page.IsPostBack) 
{
    if (this.Request.Params["panel"] ==null) 
    {
        ProjectPanel.visible=true;
    }
    else 
    {
        ShowIssueList(); // laat recordoverzicht zien
    }
}

Als er nu op een button wordt geklikt, is het een postback en wordt de waarde van de param panel niet uitgelezen :).

Het werkt dus nu door een variabele mee te geven, zo dus:

JavaScript:
1
2
var loc = window.opener.location.href + '?panel=issueList';
window.opener.location=loc;


@first part: Ah tuurlijk, had moeten weten dat parent niet op mijn manier werkt...
Pagina: 1