[ASP.NET/VB.NET/Javascript] getElementById wil niet werken..

Pagina: 1
Acties:

  • Mastakilla
  • Registratie: Februari 2001
  • Laatst online: 06-05 13:12
Ik zal beginnen met even de situatie te schetsen:

Ik ben een intranet site aan het maken voor een bedrijf...

Als webserver wordt IIS6 gebruikt, als database MS SQL 2000, als ontwikkelomgeving Visual Studio .NET, als code-behind VB.NET

als men naar een bepaalde pagina surft wordt altijd hetvolgende gedaan:

index.aspx wordt geladen, dit bevat een menu links en bovenaan, en hetgeen overblijft is een placeholder...

op deze placeholder wordt de eigelijke pagina naar waar men gesurft heeft geladen...

Die pagina's zijn "web user controls" (.ascx)

bv:
1) men surft naar event.aspx, deze file bestaat niet, maar event.ascx wel
2) index.aspx wordt geladen
3) event.ascx wordt in de placeholder geladen in index.aspx

nu het eigelijke probleem:
in mijn event.ascx moet een begin en eind datum ingevult worden... aangezien er blijkbaar maximum 1 asp:calendar per web pagina gebruikt kan worden, besloot ik om een extra venster te tonen waar de datum in gekozen kan worden...
Ik roep dit extra venster (DateTimePicker.aspx) op met javascript wanneer men op icoontje klikt naast de textbox waar de datum uiteindelijk in moet komen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    Public Sub BeginDatumSelect(ByVal sender As Object, ByVal e As EventArgs)
        Response.Write("<script language='javascript'>")
        Dim jsComm As String = ""
        jsComm &= "var strBegin; strBegin=window.showModalDialog('DateTimePicker.aspx?"
        jsComm &= "datumtijd=" & txtBegin.Text & "','DateTimePicker',"
        jsComm &= "'scroll:no;status=no;dialogWidth:500px;dialogHeight:900px;');"
        jsComm &= "if (window.document.getElementById('lbl_index') == null) alert('kan lbl_index, uit index.aspx, niet vinden');"
        jsComm &= "if (window.document.getElementById('txtBegin') == null) alert('kan txtBegin, waar de datum in moet komen, uit event.ascx, niet vinden');"
        jsComm &= "if (window.document.getElementById('" & txtBegin.ClientID & "') == null) alert('kan txtBegin, waar de datum in moet komen, uit event.ascx, niet vinden');"
        'jsComm &= "if (strBegin != null) window.document.getElementById('txtBegin').value = strBegin;"    ' --> werkt niet
        'jsComm &= "if (strBegin != null) window.document.getElementById('" & txtBegin.ClientID & "').value = strBegin;" ' --> werkt niet
        Response.Write(jsComm)
        Response.Write("</script>")
    End Sub


de 3 alerts worden aangeroepen... maw ik kan niet aan een label uit index.aspx en niet aan een textbox uit event.ascx
ik kan maw nergens aan...
De 2 pogingen om de textbox te updaten mislukken dan ook

Ik ben intussen al 2 dagen non-stop aan het zoeken achter een oplossing om toch de textbox te kunnen updaten...

Ik heb ook al een alternatief in mijn achterhoofd:
de datum opslaan in een session, of de event.ascx pagina opnieuw laden met als parameter de datum
maar bij beide alternatieven, moet ik ook de overige velden (titel, bericht, locatie, etc) ergens bijhouden, omdat de pagina moet herladen worden... :(
Het lijken me dan ook geen goede alternatieven... (het hele bericht (=richttextbox) in een session opslaan?)

Ik hoop dan ook dat iemand me kan zeggen hoe ik vanuit javascript toch aan mijn textbox zou kunnen...

Bij voorbaat dank...

[ Voor 8% gewijzigd door Mastakilla op 31-03-2005 13:48 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:09

gorgi_19

Kruimeltjes zijn weer op :9

in mijn event.ascx moet een begin en eind datum ingevult worden... aangezien er blijkbaar maximum 1 asp:calendar per web pagina gebruikt kan worden, besloot ik om een extra venster te tonen waar de datum in gekozen kan worden...
En als je verschillende ID's neemt? Lijkt me sterk dat je maar 1 calendar control kan hebben :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 01-04 20:36

Not Pingu

Dumbass ex machina

Wat voor Javascript error krijg je? Kijk eens in de HTML die je ASPX pagina genereert, en controleer of de ID van de calendar control daar wel hetzelfde is als op je originele ASPX pagina. ASP.Net voegt zelf nl. nummers toe aan controls waar nodig.

code:
1
jsComm &= "if (strBegin != null) window.document.getElementById('" & txtBegin.UniqueId & "').value = strBegin;"


Misschien helpt dit?

Certified smart block developer op de agile darkchain stack. PM voor info.


  • Mastakilla
  • Registratie: Februari 2001
  • Laatst online: 06-05 13:12
@gorgi19
probeer maar eens... je zal merken dat het misschien wel half werkt, maar helemaal... vergeet maar...

maar daar gaat het ook niet om, er is in die pagina sowieso geen plaats voor 2 calendars, vandaar dat het getelementbyid probleem sowieso opgelost zou moeten worden

[ Voor 3% gewijzigd door Mastakilla op 31-03-2005 13:54 ]


  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 01-04 20:36

Not Pingu

Dumbass ex machina

Maar kijk dan gewoon even in de HTML die je ASPX pagina produceert en check welke ID's ie daar neerzet.

Certified smart block developer op de agile darkchain stack. PM voor info.


  • Mastakilla
  • Registratie: Februari 2001
  • Laatst online: 06-05 13:12
Gunp01nt schreef op donderdag 31 maart 2005 @ 13:52:
Wat voor Javascript error krijg je? Kijk eens in de HTML die je ASPX pagina genereert, en controleer of de ID van de calendar control daar wel hetzelfde is als op je originele ASPX pagina. ASP.Net voegt zelf nl. nummers toe aan controls waar nodig.

code:
1
jsComm &= "if (strBegin != null) window.document.getElementById('" & txtBegin.UniqueId & "').value = strBegin;"


Misschien helpt dit?
thx

goeie tip

ik heb net ff gekeken in de source van de pagina... en het blijkt dat de textbox daar _ctl1_txtBegin ipv txtBegin noemt..
ik heb net ook al geprobeert
jsComm &= "if (strBegin != null) window.document.getElementById('_ctl1_txtBegin').value = strBegin;"
maar dit werkte nog niet...

Ik ga zo proberen met die uniqueid

de javascript zelf staat in de source trouwens helemaal bovenaan, kan dat misschien de reden zijn? (dat die textbox dan nog niet gemaakt is) of gaat ie pas zoeken wanneer die javascript code echt aangeroepen wordt?

edit1:
ik krijg trouwens geen javascript error (meer)...
in het begin kreeg ik constant errors dat object ni bestond enzo, maar nu weet ik dat dat komt omdat ie het element niet kan vinden, en dan kan je er ook geen value ofzo van nemen eh ;)

edit2:
ook met .uniqueid werkt het nog niet :(
kan dit misschien te maken hebben met dat die textbox in een web user control staat, en dat window.document niet hiernaar verwijst maar naar index.aspx ofzo?
of heeft dit eerder te maken met dat die javascript clientside is, en dat ik een variabele hieruit eigelijk naar de serverside wil overbrengen zonder de pagina te herladen?

en vooral:
hoe los ik dit op??

edit3:
ik weet niet of het er iets mee te maken heeft, maar in de source code zag ik ook dat "theform" gelijk wordt gesteld aan _ctl0 en niet aan _ctl1
kan dat er misschien iets mee te maken hebben?

[ Voor 39% gewijzigd door Mastakilla op 31-03-2005 14:26 ]


  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 01-04 20:36

Not Pingu

Dumbass ex machina

User controls lossen als het ware gewoon op in de pagina; je browser weet niet dat er aparte user controls waren. Dat het form een ander getal ervoor heeft, moet niets uitmaken want je moet met javascript gewoon alle elementen kunnen aanspreken.

Het is ook geen probleem om clientside de value van een textbox uit te lezen of te veranderen.


Ik zie het denk ik al, je voert die javascript gewoon uit op het moment dat de pagina getoond wordt, maar de kans is groot dat ie dan nog niet de hele pagina opgebouwd heeft en het element dat je zoekt op dat moment nog niet kan vinden.

JavaScript:
1
2
3
4
    document.onload = function(){
        var tekst = "Mijn tekst";
        element = document.getElementById('txt_Begin').value = tekst;
    };


Daar loop ik zelf ook nog wel eens tegenaan.

Certified smart block developer op de agile darkchain stack. PM voor info.


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 08-05 11:55

mulder

ik spuug op het trottoir

.Net controls hebben een ClientID. Gebruiken van de in HTML gegeneerde clientid is not done.

[ Voor 10% gewijzigd door mulder op 31-03-2005 16:32 ]

oogjes open, snaveltjes dicht


  • Mastakilla
  • Registratie: Februari 2001
  • Laatst online: 06-05 13:12
Gunp01nt schreef op donderdag 31 maart 2005 @ 16:27:
User controls lossen als het ware gewoon op in de pagina; je browser weet niet dat er aparte user controls waren. Dat het form een ander getal ervoor heeft, moet niets uitmaken want je moet met javascript gewoon alle elementen kunnen aanspreken.

Het is ook geen probleem om clientside de value van een textbox uit te lezen of te veranderen.


Ik zie het denk ik al, je voert die javascript gewoon uit op het moment dat de pagina getoond wordt, maar de kans is groot dat ie dan nog niet de hele pagina opgebouwd heeft en het element dat je zoekt op dat moment nog niet kan vinden.

JavaScript:
1
2
3
4
    document.onload = function(){
        var tekst = "Mijn tekst";
        element = document.getElementById('txt_Begin').value = tekst;
    };


Daar loop ik zelf ook nog wel eens tegenaan.
hoe/waar kan ik de javascript dan uitvoeren zodat hij mijn controls wel vind?
en als ik het goed begrijp kan je met clientside javascript de waarde van de textbox wel wijzigen, maar wijzigd dan ook de waarde in die textbox voor .NET? of moet je dat ook nog op 1 of andere manier synchroniseren nadien?
Don Facundo schreef op donderdag 31 maart 2005 @ 16:31:
.Net controls hebben een ClientID. Gebruiken van de in HTML gegeneerde clientid is not done.
en wat dan wel?

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 08-05 11:55

mulder

ik spuug op het trottoir

.Net controls hebben een ClientID
document.getElementById('<%=ControlName1.ClientID%>');

oogjes open, snaveltjes dicht


  • Mastakilla
  • Registratie: Februari 2001
  • Laatst online: 06-05 13:12
Don Facundo schreef op vrijdag 01 april 2005 @ 10:02:
[...]

document.getElementById('<%=ControlName1.ClientID%>');
je bedoeld hiermee dat het niet goed is om die _ctl1_ er hardcoded voor te zetten?

en dat ie het op deze manier zelf ervoor zet (merkt ik net door ff in source code te kijken naar de veranderingen)

maar nog steeds vind hij geen "element" terug
ik heb net ook al geprobeert mijn javascript in een functie te zetten, en die bij document.onload te laden... maar dan werkt mijn knop om het venster te tonen helemaal niet meer...

[ Voor 26% gewijzigd door Mastakilla op 01-04-2005 10:22 ]


  • Mastakilla
  • Registratie: Februari 2001
  • Laatst online: 06-05 13:12
pfff... ik geef het op

KUT javascript

ik doe nu gewoon een windows.open voor het venster en sla alles op wat ik moet bewaren in een aantal sessions ipv de datum door te geven via javascript...

misschien wat minder netjes, maar het werkt tenminste...

[ Voor 9% gewijzigd door Mastakilla op 01-04-2005 13:48 ]

Pagina: 1