Toon posts:

[asp.NET] onClickEvent

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb dus een aspx-pagina waarin ik in een functie die ik bij het laden oproep een xml-file lees. afhankelijk van het aantal nodes in die file maak ik in realtime imagebuttons aan. dit is allemaal geen prob.

dan geef ik aan elke imagebutton ook een onClick event mee, ook geen probleem.

als ik de pagina dan laad en ik klik op een imagebutton wordt de pagina opnieuw geladen en worden dus opnieuw dezelfde imagebuttons geplaatst en dit zou niet mogen. Ik heb het al onder page_init gezet maar dat lost ook niets op.

hier volgt mijn code van het laden van de pagina:
Visual Basic:
1
2
3
Public Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
test()
end sub

de sub test:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 Sub Test()
        'creatie nieuwe dataset
        Dim myDataSet As DataSet = New DataSet()

        'xml document in dynaset plaatsen
        Dim xmldoc As XmlDataDocument = New XmlDataDocument(myDataSet)
        'nieuwe node definiëren
        Dim xmlnode As XmlNode
        Dim xmlLightNode As XmlNode
        Dim xmlElements As XmlElement

        'xml laden
        xmldoc.Load("c:\myxml.xml")
        xmlnode = xmldoc.ChildNodes(2)
        xmlLightNode = xmlnode.ChildNodes(0) 'node 1
        i = 1
        aantal = xmlnode.ChildNodes.Count
        Dim imagebutton(aantal) As System.Web.UI.WebControls.ImageButton
        While i <= aantal - 1
            xmlLightNode = xmlnode.ChildNodes(i)
            imagebutton(i) = New ImageButton()
           'hier geef ik alle waardes mee ...
            ' deze regel dient om later na te gaan bij welk object de knop hoort
            imagebutton(i).ID = premise_obj
            ' imagebutton(i).Attributes.Add("ButtonClick", "ButtonClick")
            AddHandler imagebutton(i).Click, AddressOf ButtonClick
            Me.Form1.Controls.Add(imagebutton(i))
            i = i + 1
        End While
    End Sub

Hoe kan ik er best voor zorgen dat die pagina of mijn sub test niet opnieuw wordt geladen/uitgevoerd?

[ Voor 6% gewijzigd door Verwijderd op 14-06-2003 17:23 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

modbreak:
Heb je al gedebugged? Call stacks bekeken? Logging aangemaakt? Opgezocht op MSDN online?

Je bent al meerdere keren op de FAQ's gewezen recent, en je weet dus als het goed dat er van je wordt verwacht dat je aangeeft wat je zoal hebt geprobeerd, wat je vermoed dat het probleem is, wat de resultaten van zelf debuggen zijn e.d. Corrigeer dit aub. zo snel mogelijk, want nu is het net als je vorige topics enkel een lap code met aan ons het verzoek om te debuggen. Als dit niet snel opgelost is gaat ie wederom op slot!!!

Professionele website nodig?


Verwijderd

Topicstarter
Ik heb gedebugged en daar krijg ik geen fouten, daar zie ge mooi hoe de sub test terug wordt uitgevoerd als ik op mijn imagebutton klik

dit is de stack

HttpException (0x80004005): Multiple controls with the same ID '{CBECB983-948C-408C-AB8E-46117119908D}' were found. FindControl requires that controls have unique IDs.]
System.Web.UI.Control.FillNamedControlsTable(Control namingContainer, ControlCollection controls)
System.Web.UI.Control.FillNamedControlsTable(Control namingContainer, ControlCollection controls)
System.Web.UI.Control.FillNamedControlsTable(Control namingContainer, ControlCollection controls)
System.Web.UI.Control.EnsureNamedControlsTable()
System.Web.UI.Control.FindControl(String id, Int32 pathOffset)
System.Web.UI.Control.FindControl(String id)
System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad)
System.Web.UI.Page.ProcessRequestMain()


maar hier ken ik niets van. ik weet alleen dat de buttons opnieuw worden geplaatst en dat ik doordat ze hetzelfde id hebben een fout krijg

[ Voor 7% gewijzigd door Verwijderd op 14-06-2003 17:33 ]


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

gorgi_19

Kruimeltjes zijn weer op :9

HttpException (0x80004005): Multiple controls with the same ID '{CBECB983-948C-408C-AB8E-46117119908D}' were found. FindControl requires that controls have unique IDs.]
Wat snap je hier niet aan?

* gorgi_19 heeft een klein beetje de indruk dat het probleem met dynamische controls iets te hoog is gegrepen voor de ts...

[ Voor 13% gewijzigd door gorgi_19 op 14-06-2003 17:50 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Visual Basic:
23
24
' deze regel dient om later na te gaan bij welk object de knop hoort
imagebutton(i).ID = premise_obj

Wat staat er in premise_obj?

Verwijderd

Topicstarter
in premise id staat die ID die je hierboven in die stack ziet nl: {CBECB983-948C-408C-AB8E-46117119908D}
iedere button krijgt zo een uniek id mee waarmee later de button wordt geidentificeerd.

ik snap die stack wel, ik weet wel dat dit wil zegge dat de ID 2X voorkomt maar er staat niet waarom de pagina opnieuw geladen wordt en dat moet ik juist weten want daarom loopt het fout

[ Voor 33% gewijzigd door Verwijderd op 14-06-2003 17:58 ]


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

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 14 June 2003 @ 17:57:
in premise id staat die ID die je hierboven in die stack ziet nl: {CBECB983-948C-408C-AB8E-46117119908D}
iedere button krijgt zo een uniek id mee waarmee later de button wordt geidentificeerd.
Ze krijgen een ID mee, maar deze is niet uniek, getuige de foutmelding.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
idd de ID is niet meer uniek, juist omdat de pagina opnieuw geladen wordt en het lezen van de xml waarin deze ID's staan opnieuw gebeurd (en het plaatsen van de buttons dus ook)

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

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 14 juni 2003 @ 17:59:
idd de ID is niet meer uniek, juist omdat de pagina opnieuw geladen wordt en het lezen van de xml waarin deze ID's staan opnieuw gebeurd (en het plaatsen van de buttons dus ook)
Dus moet je zorgen dat bij een postback de actie niet uitgevoerd wordt..

Hoewel ik me afvraag of de handler van het load event uberhaupt de juiste plaats is hiervoor, maar goed.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
ik zal mij eens verdiepen in postback dan, je hebt gezegd dat het mss te hoog gegrepen is voor mij, daar kan je gelijk in hebben maar mijn stageproject wil ik afkrijgen te hoog gegrepen of niet. ik kan er alleen maar van leren niet?

Verwijderd

Zal ik een even vriendelijk zijn en een beetje code posten :)
Sub Page_Load(sender As Object, e As EventArgs)
If NOT IsPostBack Then
...
End If
End SUb

Verwijderd

Verwijderd schreef op 14 juni 2003 @ 17:57:
in premise id staat die ID die je hierboven in die stack ziet nl: {CBECB983-948C-408C-AB8E-46117119908D}
iedere button krijgt zo een uniek id mee waarmee later de button wordt geidentificeerd.

ik snap die stack wel, ik weet wel dat dit wil zegge dat de ID 2X voorkomt maar er staat niet waarom de pagina opnieuw geladen wordt en dat moet ik juist weten want daarom loopt het fout
premise_obj wordt dus 1 maal voor de loop geinitieerd met die waarde, maar binnen de while loop geef je hem niet voor ieder element binnen de ImageButton array een nieuw ID, maar hetzelfde.

Wellicht als je voor regel 23 maar wel binnen de while loop zorgt dat er een nieuwe, unieke waarde aan premise_obj wordt toegekend, dat het dan wel goed gaat ;)

Succes! :)

/me does his 'Spuit 11 dance' and finishes by leap frogging off the back of the stage

Verwijderd

Topicstarter
jawel hoor, die krijgt zijn waarde van het xml-doc mee tijdens de lus, ik had die code eruit geladen hier omdat daar de fout niet zat. het heeft te maken dat de pagina opnieuw geladen wordt

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

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 14 juni 2003 @ 18:05:
Zal ik een even vriendelijk zijn en een beetje code posten :)
Sub Page_Load(sender As Object, e As EventArgs)
If NOT IsPostBack Then
...
End If
End SUb
Wat dus ws niet gaat werken.

ASP:
1
2
3
4
5
Private Sub Page_Load(sender As Object, e As EventArgs) Handles Mybase.Load
     If Not Page.IsPostBack Then

     End If
End Sub

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
Verwijderd schreef op 14 June 2003 @ 18:11:
jawel hoor, die krijgt zijn waarde van het xml-doc mee tijdens de lus, ik had die code eruit geladen hier omdat daar de fout niet zat. het heeft te maken dat de pagina opnieuw geladen wordt
Je moet dus zoals gorgi_19 al zei checken of er een postback plaatsvind. (IsPostBack property)

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 14 June 2003 @ 18:11:
[...]


Je moet dus zoals gorgi_19 al zei checken of er een postback plaatsvind. (IsPostBack property)
Waarbij je eik de hele Load handler moet vergeten en de boel in de CreateChildControls method moet flikkeren, maar da's een ander verhaal.... :P

[ Voor 6% gewijzigd door gorgi_19 op 14-06-2003 18:13 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
gorgi_19 schreef op 14 juni 2003 @ 18:11:
[...]

Wat dus ws niet gaat werken.

ASP:
1
2
3
4
5
Private Sub Page_Load(sender As Object, e As EventArgs) Handles Mybase.Load
     If Not Page.IsPostBack Then

     End If
End Sub
Waarom niet?
Wat is het verschil tussen zijn code en uw code? (Behalve dan dat je er bij Page voorstaat?) Aangezien je in de Page class zit, is dat nu toch hetzelfde?

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 14 June 2003 @ 18:13:
[...]


Waarom niet?
Wat is het verschil tussen zijn code en uw code? (Behalve dan dat je er bij Page voorstaat?) Aangezien je in de Page class zit, is dat nu toch hetzelfde?
Het handles gedeelte. ;)
Ik vang het event af, hij niet. :) Aangezien TS met code-behind werkt, moet je afaik de event gaan afhandelen. Werk je op de 'scripting manier' zonder code-behind (zoals pagina's die je maakt met webmatrix), dan kon het geloof ik wel.

[ Voor 25% gewijzigd door gorgi_19 op 14-06-2003 18:15 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
idd gorgi_19, het werkt idd niet, maar ik krijg wel geen fouten meer omdat juist mijn sub test niet meer opnieuw wordt uitgevoerd, maar nu staan mijn buttons ook niet meer op mijn pagina :s

Zou ik het ook niet zo kunnen oplossen: als ik klik op een imagebutton dat dan hetgeen wat uitgevoerd moet worden gebeurt en dat ik dan mijn pagina leeg maak en opnieuw laad??

[ Voor 33% gewijzigd door Verwijderd op 14-06-2003 18:15 ]


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

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 14 June 2003 @ 18:13:
idd gorgi_19, het werkt idd niet, maar ik krijg wel geen fouten meer omdat juist mijn sub test niet meer opnieuw wordt uitgevoerd, maar nu staan mijn buttons ook niet meer op mijn pagina :s

Zou ik het ook niet zo kunnen oplossen: als ik klik op een imagebutton dat dan hetgeen wat uitgevoerd moet worden gebeurt en dat ik dan mijn pagina leeg maak en opnieuw laad??
Erhm.. Ik zou, tenzij je erg goed weet waar je mee bezig bent, dit niet overwegen.. ASP.net loopt nogal een beetje te klooien met z'n controlcollectie....
Toevoegen mag, maar wil je er daarna eentje verwijderen, is die helemaal niet dol op...

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Jah sry ik werk met webmatrix!
Dus page.IsPostback ;)
Maar voor de rest is mijn code goed :)

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

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 14 June 2003 @ 18:17:
Jah sry ik werk met webmatrix!
Dus page.IsPostback ;)
Maar voor de rest is mijn code goed :)
Nope, da's het verschil niet...

Je moet het load event afvangen..
Private Sub Page_Load(sender As Object, e As EventArgs) Handles Mybase.Load
If Not Page.IsPostBack Then

End If
End Sub
Daar ligt het grote verschil. (zie vetgedrukte gedeelte)

* gorgi_19 is trouwens ook wel benieuwd waarom de TS het als een XML document beschouwd en niet de ReadXML method van de dataset gebruikt...

[ Voor 13% gewijzigd door gorgi_19 op 14-06-2003 18:20 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
mannen, ik heb dus die postback ter bij gezet, allemaal goed en wel : ik krijg geen foutmelding meer, maar de pagina wordt wel nog steeds opnieuw geladen en dan heb ik dus een lege pagina...

gorgi_19, waarom een xml-document, wel toen ik daar aan bezig was heb ik wat zitten zoeken hoe ik een xml moest lezen en ben toen daar op uitgekomen...

Verwijderd

Handles Mybase.load -> ik moet beter lezen

TS: Dus de eerste keer werkt ze wel en als je herlaadt niet meer?

Verwijderd

Topicstarter
ja als ik herlaad dan doet die die lus niet waarmee ik mijn buttons plaats dus heb ik een lege pagina

ik zou meermaals moete kunne klikke op mijn buttons

[ Voor 22% gewijzigd door Verwijderd op 14-06-2003 18:48 ]


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

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 heeft zo een donkerbruin vermoeden dat het onder andere aan
ASP.NET:
1
Me.Form1.Controls.Add(imagebutton(i))

ligt

[ Voor 18% gewijzigd door gorgi_19 op 14-06-2003 18:53 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
Tja, als je het laden van die controls in de Page_Load doet, en je zorgt ervoor dat het bij een postback niet gebeurt, dan is het logisch dat die controls er niet in verschijnen.

https://fgheysels.github.io/


Verwijderd

Zou je geen link kunnen geven waar het gehost is want aspfreakout is een beetje de weg kwijt
Pagina: 1