Toon posts:

[ASP.NET] JS-functie uitvoeren in vb.net procedure

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi

ik heb een loginpagina die na het inloggen terug moet naar de oorspronkelijke pagina, maar OOK een pagina in een ander frame moet refreshen/relocaten. Ik weet, dit moet met een clientzijde-script. Javascript dus maar :D

Maar hierdoor loop ik dus tegen een probleem aan.

De submitcode voor het inloggen:
code:
1
2
3
4
5
6
7
8
9
10
11
sub Login(obj as object, e as eventargs)
    If  FormsAuthentication.Authenticate(tbUsername.Text, tbPassword.Text) then

                    ' ### HIER WAARSCHIJNLIJK CODE 
                    ' OM JS-FUNCTIE MEE te "CREEEREN" ###

        FormsAuthentication.RedirectFromLoginPage(tbUsername.text, false)
    Else
        lblMessage.Text = Ongeldige gebruikersnaam en/of wachtwoord<p>"
    End If
end sub


De JS-functie die ik wil laten uitvoeren nadat de gebruikersnaam en het wachtwoord gevalideerd zijn:
code:
1
2
3
4
5
<Script type="text/javascript">
  function relocateFrame() {
  window.onder.location='onder.aspx';
  }
</Script>


Ik heb zelf ook al geprobeerd om de code in de body te genereren (nee, niet als functie :)) dmv. code render blokken en labels en weet ik veel wat, maar daar kwam ik ook niet uit. :/

Ik weet het niet... Hoe kan ik dit nu voor elkaar krijgen :?

[ Voor 6% gewijzigd door Verwijderd op 05-09-2003 10:24 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

weet je zeker dat die JS functie gaat werken? ;)

Intentionally left blank


Verwijderd

Topicstarter
crisp schreef op 05 September 2003 @ 10:26:
weet je zeker dat die JS functie gaat werken? ;)
Ik weet zeker dat ie t niet doet nu :) Maar deze wel.
code:
1
2
3
4
5
<Script type="text/javascript">
  function relocateFrame() {
  parent.frames["onder"].location.href='onder.aspx'
  }
</Script>
Maar dit maakt helemaal niets uit... het probleem blijft, want de browser gaf een .NET fout aan. Dus deze was nog helemaal niet toe aan het interpreteren van een JS-script.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54

Je VB.NET code wordt server side uitgevoerd. Daar kan je dus geen clientside script gaan inproppen.

Wat je wel kunt doen is:
code:
1
2
3
4
5
6
7
8
sub Login 

   // hier wat vb.NET code

  // Hier moet de JS uitgevoerd worden:
  Response.Write ("<script>function relocateFram(){ .....");

end sub

[ Voor 4% gewijzigd door whoami op 05-09-2003 10:52 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ok, dan heb ik een functie als output... maar deze wordt dan nog niet aangeroepen door de client... dan maak ik er toch geen functie van, maar alleen de parent.frames....-line? Nee, werkt ook niet... :?

[ Voor 11% gewijzigd door Verwijderd op 05-09-2003 11:02 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Verwijderd schreef op 05 September 2003 @ 11:02:
Ok, dan heb ik een functie als output... maar deze wordt dan nog niet aangeroepen door de client... dan maak ik er toch geen functie van, maar alleen de parent.frames....-line? Nee, werkt ook niet... :?
Je kan ook enkel de functie -body in dat script opnemen:

code:
1
response.Write ("<script>window.location= ...</script>");

https://fgheysels.github.io/


Verwijderd

Topicstarter
werkt ook niet... :/

Dit heb ik er nu zelf van gemaakt aan de hand van de aanwijzingen en het werkt nog niet: :'( Ik snap het niet... zou het zo moeten doen toch?
code:
1
2
3
4
5
6
7
8
9
    sub Login(obj as object, e as eventargs)
        If  FormsAuthentication.Authenticate(tbUsername.Text, tbPassword.Text) then
            Response.Write("<script>parent.frames['onder'].location.href='onder.aspx'")
            FormsAuthentication.RedirectFromLoginPage(tbUsername.text, false)
            lblMessage.Text = "Aanmelding succesvol!"
        Else
            lblMessage.Text = "Ongeldige gebruikersnaam en/of wachtwoord!<p>"
        End If
    end sub

[ Voor 130% gewijzigd door Verwijderd op 05-09-2003 11:59 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Kan je niet beter gebruik maken van

Page.RegisterClientScriptBlock( key, script )?
dan komt het script tenminste gewoon netjes in je html en niet voor al je html.

“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 05 september 2003 @ 11:59:
Kan je niet beter gebruik maken van

Page.RegisterClientScriptBlock( key, script )?
dan komt het script tenminste gewoon netjes in je html en niet voor al je html.
Ik zie het ja... en de code in een label zitten gaat ook niet werken...

Ik zal eens kijken of ik wat info kan vinden over Page.RegisterClientScriptBlock( key, script )

Maar nu eerst vreten :9~ B)

Verwijderd

Eet smakelijk

Verwijderd

Topicstarter
Dankje, het heeft gesmaakt... RWB, ik heb ff uitgezocht hoe dat registreren van een scriptblock werkt... heb het volgende voorbeeld gevonden. Dit voor degene die clientzijde script wil genereren in vb.net

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<html>
  <head>
     <script language="VB" runat="server">
    Sub Page_Load( sender as Object,e as EventArgs) 
         
       'Form the script that is to be registered at client side.
        Dim scriptString as String = "<script language=JavaScript> function DoClick() {"
        scriptString += "myForm.show.value='Welcome to Microsoft .NET'}<"
        scriptString += "/"
        scriptString += "script>"
      
            If(Not IsClientScriptBlockRegistered("clientScript"))
        RegisterClientScriptBlock("clientScript", scriptString)
        End If
     End Sub
     </script>
  </head>
  <body topmargin="20" leftmargin="10">
     <form id="myForm" runat="server">
        <input type="text" id="show" style="width=200">
      <input type="button" value="ClickMe" onclick="DoClick()">
     </form>
  </body>
</html>


maar dit gaat niet werken bij mij |:( , aangezien ik zoals hier de JS-functie DoClick() moet uitvoeren, MAAR OOK aan de serverzijde de login-procedure :'(
En in het onclick event van de butten twee aanroepen te zetten wordt lastig lijkt me zo... ik begin al aardig gaar te worden hier

[ Voor 15% gewijzigd door Verwijderd op 05-09-2003 13:12 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Visual Basic .NET:
1
2
3
4
Dim __button as Button = new Button
__button.Text = "Klik mij eens!"
__button.Attributes.Add("OnClick","alert('woei!')")
Controls.Add(__button)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
ja, dat kan gorgi, maar dit gaat toch niet werken als je een vb.net procedure server sided moet uitvoeren en daarnaast een JS-functie aan de clientkant??

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 05 September 2003 @ 13:17:
ja, dat kan gorgi, maar dit gaat toch niet werken als je een vb.net procedure server sided moet uitvoeren en daarnaast een JS-functie aan de clientkant??
Wat denk je dat die Attributes collection betekent?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
pfff, ik krijg echt concentratieproblemen hier...

gorgi, in jouw voorbeeld wordt toch alleen de JS-alert aangeroepen? Maar nu moet dus ook de Login-procedure gestart worden...

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Op die manier kan je idd clientside script door een button laten uitvoeren, maar kan je ook een conditie toevoegen wanneer dat client-side script mag uitgevoerd worden?

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 05 September 2003 @ 13:21:
Op die manier kan je idd clientside script door een button laten uitvoeren, maar kan je ook een conditie toevoegen wanneer dat client-side script mag uitgevoerd worden?
Het script wordt nu aangeroepen als het clientside onclick event gebruikt wordt. Vervolgens wordt daarna de alertfunctie opgeroepen. Je kan ook dus een custom clientside functie oproepen. In deze functie kan je voorwaarden zetten.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Verwijderd schreef op 05 September 2003 @ 13:21:
pfff, ik krijg echt concentratieproblemen hier...

gorgi, in jouw voorbeeld wordt toch alleen de JS-alert aangeroepen? Maar nu moet dus ook de Login-procedure gestart worden...
Die kan je in de server-side onclick zetten van die button.

https://fgheysels.github.io/


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

gorgi_19 schreef op 05 September 2003 @ 13:26:
[...]

Het script wordt nu aangeroepen als het clientside onclick event gebruikt wordt. Vervolgens wordt daarna de alertfunctie opgeroepen. Je kan ook dus een custom clientside functie oproepen. In deze functie kan je voorwaarden zetten.
gorgi_19: TS wil volgens mij niet de functie uitvoeren bij een event, maar keihard dat stukje javascript outputten zodat het clientside bij het parsen van de pagina al uitgevoerd wordt :)

Intentionally left blank


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

crisp schreef op 05 september 2003 @ 13:29:
[...]

gorgi_19: TS wil volgens mij niet de functie uitvoeren bij een event, maar keihard dat stukje javascript outputten zodat het clientside bij het parsen van de pagina al uitgevoerd wordt :)
Dan kan je het nog eenvoudiger oplossen en wordt het een clientside probleem.
Onder de functie die je toevoegd zet je dan:
JavaScript:
1
window.onload = functienaamaanroep()

En deze voeg je dan in je Page.OnRegisterStartupClient oid.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

gorgi_19 schreef op 05 September 2003 @ 13:32:
[...]

Dan kan je het nog eenvoudiger oplossen en wordt het een clientside probleem.
Onder de functie die je toevoegd zet je dan:
JavaScript:
1
window.onload = functienaamaanroep()

En deze voeg je dan in je Page.OnRegisterStartupClient oid.
da's alsnog een event ;)

Intentionally left blank


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

crisp schreef op 05 September 2003 @ 13:34:
[...]

da's alsnog een event ;)
Maar dan heb je toch hetzelfde resultaat, toch?

* gorgi_19 is niet zo thuis in clientside gebeuren.. * gorgi_19 vindt dat veel te eng...

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Hmm ja, ik heb ff een bakje koffie gehaald en begin weer wat nuchterder te worden...

inderdaad moet de Jscript bij het parsen uitgevoerd worden. Hetgeen ik uiteindelijk voor elkaar wil krijgen is dus dat wanneer ik op mijn pagina inlog er in een ander frame een pagina geladen/gerefreshed wordt. (Dit is ondertussen misschien een beetje onduidelijk geworden.

Ik wil dus serverzijde inloggen, vervolgens moet er aan de clientzijde een scriptje gerunt worden.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 05 September 2003 @ 13:36:
Ik wil dus serverzijde inloggen, vervolgens moet er aan de clientzijde een scriptje gerunt worden.
* gorgi_19 denkt dat die antwoorden, evt met een paar posts samen te voegen, wel gegeven zijn. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
ja ik denk het ook :) ik ga het uitzoeken nu

euhm, nee.. staat er niet denk ik..

er staat idd het een en ander over een functie achter een event zetten (maar ik wil liever niet 2maal op een knop moeten klikken :)).

Dat scriptblockregistreren is alleen voor functies in de head van de pagina. Een button clientzijde attributen meegeven werkt ook niet, aangezien ik dan alsnog eerst moet klikken eer de functie uitgevoerd wordt.

Onload de functie aanroepen werkt ook niet, want dat zou inhouden dat ik net zo goed de functie in de source al in JS kan invoeren (wel heel simpele work around)... maar ik wil dat het onderste frame alleen wordt her/geladen wanneer ik Inlog.

:'(

- In wezen moet ik gewoon script-tags + code in mn body zien te krijgen.
- Of ik moet na het submitten server-sided de BODY-tag een onload-attribuut mee kunnen geven die de functie clientzijde aanroept... Maar hoe doe ik dit? Kan het wel?

[ Voor 112% gewijzigd door Verwijderd op 05-09-2003 14:07 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

gorgi_19 schreef op 05 september 2003 @ 13:35:
[...]

Maar dan heb je toch hetzelfde resultaat, toch?

* gorgi_19 is niet zo thuis in clientside gebeuren.. * gorgi_19 vindt dat veel te eng...
Het onload event wordt pas getriggerd nadat de pagina geparsed is.
Wat TS nodig heeft is gewoon iets om een JS scriptblokje te creeeren waar hij 1 regel code in kan zetten zodat het clientside resultaat dit wordt:
HTML:
1
2
3
<script type="text/javascript">
parent.frames['onder'].location.href='onder.aspx';
</script>

toch wel heel erg basic lijkt me, of voorziet ASP.NET niet in dit soort simpele dingen?

Intentionally left blank


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

crisp schreef op 05 September 2003 @ 13:41:
[...]

Het onload event wordt pas getriggerd nadat de pagina geparsed is.
Wat TS nodig heeft is gewoon iets om een JS scriptblokje te creeeren waar hij 1 regel code in kan zetten zodat het clientside resultaat dit wordt:
HTML:
1
2
3
<script type="text/javascript">
parent.frames['onder'].location.href='onder.aspx';
</script>

toch wel heel erg basic lijkt me, of voorziet ASP.NET niet in dit soort simpele dingen?
Jups; je kan het in een placeholder plaatsen, deze standaard op invisible zetten en pas visible maken op het moment van inloggen.

2e mogelijkheid is om met behulp van Page.RegisterClientStartupScript (oid) een en ander te vogelen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
crisp schreef op 05 september 2003 @ 13:41:
[...]

Het onload event wordt pas getriggerd nadat de pagina geparsed is.
Wat TS nodig heeft is gewoon iets om een JS scriptblokje te creeeren waar hij 1 regel code in kan zetten zodat het clientside resultaat dit wordt:
HTML:
1
2
3
<script type="text/javascript">
parent.frames['onder'].location.href='onder.aspx';
</script>

toch wel heel erg basic lijkt me, of voorziet ASP.NET niet in dit soort simpele dingen?
tuurlijk wel en er is ook allang gezegd hoe
C#:
1
2
3
Page.RegisterClientScriptBlock( "mijnscriptje", @"<script type='text/javascript'>
parent.frames['onder'].location.href='onder.aspx';
</script>" );

“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
ik waardeer de hulp echt, maar het lukt hier niet mee...

dat RegisterClientScriptBlock is idd handig, maar hoe krijg ik dat ClientSCriptBlock dan tussen mn body-tags van mijn html-output?? dat kan ik nergens vinden... volgens mij is dit er alleen maar om een functie tussen je head-tags te kunnen zetten.

En wat een placeholder betreft:
Use the PlaceHolder control as a container to store dynamically added server controls to the Web page. The PlaceHolder control does not produce any visible output and is only used as a container for other controls on the Web page
(source: msdn)
Gaat dus ook niet

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 05 September 2003 @ 14:37:
ik waardeer de hulp echt, maar het lukt hier niet mee...

dat RegisterClientScriptBlock is idd handig, maar hoe krijg ik dat ClientSCriptBlock dan in mn body-tags van mijn html-output?? dat kan ik nergens vinden... volgens mij is dit er alleen maar om een functie tussen je head-tags te kunnen zetten.
Je kan afaik helemaal geen code tussen je head-tags zetten? :? Tenzij je hier een aparte placeholder voor neerzet.
En wat een placeholder betreft:

[...]
Gaat dus ook niet
Een placeholder genereert als enige geen HTML-output, maar is wel een container control. Deze container heeft een visible property. En aan de controlcollection kan je literalcontrols hangen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
:) tussen de <head> code(lees functie) </head>
misschien beetje vaag verwoord in voorgaande post, maar dit bedoelde ik dus

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

In dit geval maakt het niet uit of de code in de head-sectie of in de body-sectie wordt geplaatst. Eigenlijk is hoe hoger hoe beter, maar in beide gevallen wordt de javascript gewoon uitgevoerd tijdens het parsen.

Intentionally left blank


Verwijderd

Topicstarter
JA!!! je hebt helemaal gelijk

code:
1
2
3
4
5
6
7
Dim scriptString as String = "<script language=JavaScript>parent.frames['onder'].location.href='onder.aspx'<"
            scriptString += "/"
            scriptString += "script>"
          
            If(Not IsClientScriptBlockRegistered("clientScript"))
            RegisterClientScriptBlock("clientScript", scriptString)
            End If

in mijn login-procedure is de oplossing die ik zocht.

Sorry van mijn kant, ik meende dat jscript buiten een functie alleen binnen de body-tags mocht staan... had ik dat ff compleet FOUT |:(

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Als je script in je body wilt hebben moet je gebruik maken van de
Page.RegisterClientScriptBlock
Method. Dit soort dingen staan allemaal super duidelijk in de msdn beschreven.

“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
Ik wordt errug ziek nu 8)7 |:( :?

Ok, ff voor de duidelijkheid, nu volgt mijn login-procedure:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 If  FormsAuthentication.Authenticate(tbUsername.Text, tbPassword.Text) then
            
            'Script genereren die aan de clientzijde moet worden uitgevoerd (refresh van onder-frame)
            Dim scriptString as String = "<script language=JavaScript>parent.frames['onder'].location.href='onder.aspx'<"
            scriptString += "/"
            scriptString += "script>"         
            If(Not IsClientScriptBlockRegistered("clientScript"))
            RegisterClientScriptBlock("clientScript", scriptString)
            End If  
                                
            FormsAuthentication.RedirectFromLoginPage(tbUsername.text, false)
            lblMessage.Text = "<font color='#66ccoo'>*** Aanmelding succesvol! ***</b></font><p>"
        Else
            lblMessage.Text = "<font color=red>*** Ongeldige gebruikersnaam en/of wachtwoord! ***</font><p>"
        End If


FormsAuthentication.RedirectFromLoginPage(tbUsername.text, false) moet erin blijven staan... MAAR hierdoor wordt dus niet de Jscript gerunt :'(

Wat nu??? :|

Verwijderd

Topicstarter
als iemand de oplossing heeft :) post em maar.. dan heeft iemand anders met een dergelijk probleem er wat aan...

ik gebruik een workaround.. kan hier niet langer mee bezig zijn.
Ik refresh het frame dmv een body-onunload in mn login-pagina. Was niet helemaal de bedoeling, maar werkt wel.

Danku allen voor het meedenken
Pagina: 1