Toon posts:

[asp.net]datagrid edit knop werkt pas na de tweede klik

Pagina: 1
Acties:

Verwijderd

Topicstarter
Wederom een vraag van mij, ik ben beginnend asp.net ontwikkelaar dus er rijzen nogal wat vragen bij mij tijdens het proces. De meeste zijn wel te googlen ofzo, maar sommige kan ik weinig over vinden.

Afijn, ik heb een pagina(klant.aspx), met daarop verschillende placeholders met daarin verschillende usercontrols (uitgebreid.ascx / sla.ascx) en nog een placeholder met daarin een navigatie (navbar.ascx).

Wanneer de pagina wordt geladen wordt automatisch uitgebreid.ascx getoond (sla.ascx niet). Op deze pagina staat een datagrid met daarin een edit-knop (ook verwijder en toevoegen). Wanneer ik hier op deze edit-knop klik gaat het goed, en komt mn datagrid in edit-mode.

Wanneer ik naar de sla navigeer (en dus uitgebreid sluit), komt er wederom een datagrid met een edit-knop (ook verwijder en toeveogen, hebben overigens hetzelfde probleem). Alsik nu op de edit knop klik, gebeurt er niets. Klik ik vervolgens nogmaals, gaat het wel goed.

Als ik nu weer terug navigeer naar uitgebreid heb ik hetzelfde probleem.

Ik heb dmv invullen van textboxjes tijdens het proces (dus bijv. bij page_load klant.aspx een box invullen met page_load (klant), dan bij page_load van sla.ascx page_load(sla) toevoegen aan deze box. hierdoor kan ik dus zien wat er gebeurt en in welke volgorde.). Er zit geen verschil in deze boxjes, alleen bij de 2e keer klikken wordt de editcommand uitgevoerd.

Dus ging ik eens kijken naar de html code van de pagina, en nu blijkt dat bij uitgebreid.ascx de edit knop als volgt is gedefinieerd:
<input type="image"
 name="_ctl1:dgAdres:_ctl2:butEdit"
 id="_ctl1_dgAdres__ctl2_butEdit" 
blabla


bij de eerste keer van sla.ascx:
<input type="image" 
name="_ctl2:hgSla:_ctl2:butEdit"
 id="_ctl2_hgSla__ctl2_butEdit" 
blabla


en bij de tweede keer van sla.ascx (dus na de eerste keer klikken):
<input type="image" 
name="_ctl1:hgSla:_ctl2:butEdit"
 id="_ctl1_hgSla__ctl2_butEdit" 
blabla


Mij viel op dat de knop _ctl1 heeft bij name en id wanneer hij wel werkt, en _ctl2 wanneer hij niet werkt. Ik vermoed dus dat het hieraan ligt, maar zoals eerder gezegd, ik ben nog niet zo'n asp.net expert. Misschien dat iemand weet of het daadwerkelijk hieraan ligt, en vooral, hoe ik het kan verhelpen.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:26

gorgi_19

Kruimeltjes zijn weer op :9

Je hebt je controlcollection gesloopt, waardoor je viewstate niet meer klopt voor die control na een postback en de eventhandler, behorende bij het afgevuurde event, niet gevonden / gekoppeld kan worden, waardoor de actie niet uitgevoerd. Oplossing mag je zelf gaan bedenken :)

[ Voor 4% gewijzigd door gorgi_19 op 26-05-2005 14:04 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • akakiwi
  • Registratie: September 2000
  • Laatst online: 20-03 11:13

akakiwi

I believe in the ruling class.

Inderdaad. Gorgi_19 heeft gelijk.
Je moet er voor zorgen dat je control collection in orde voordat de Page_Load eindigt. Dan is dit probleem meteen verholpen.

| Life is a game (and games are fun) | homepage |


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

Not Pingu

Dumbass ex machina

Ik heb hier ook last van in een project. Daarbij worden ook usercontrols dynamisch in de pagina geinjecteerd. Maar de samenstelling van die usercontrols verandert niet tijdens een Postback. Bij mij doet het zich ook heel sporadisch voor: de ene keer werkt een postback gewoon, de andere keer moet ik 6x klikken.

Viewstate werkt wel goed omdat de inhoud van de pagina blijft bij een postback. Als de viewstate ongeldig zou zijn, zou je een lege pagina moeten zien.
Wat kan ik hieraan doen? Ik heb geprobeerd om de populatie van de usercontrols alleen te doen als er geen postback plaatsvindt, maar het gekke is dat er dan weer niks op de pagina staat.

[ Voor 17% gewijzigd door Not Pingu op 26-05-2005 15:58 ]

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


Verwijderd

Topicstarter
Ok, ik begrijp hieruit dat ik dus control collection anders moet laden (dit zijn dus de knoppen die ik heb? ook de placeholders zeker?).

En ik neem aan dat dit geldt voor alle knoppen (ook van navbar.ascx, ondanks dat deze toch niets te maken heeft met sla.ascx?), want als ik sla.ascx los open gaat het wel goed.

Die placeholder van sla.ascx kan pas ingesteld worden als ik weet welke knop op navbar is geklikt. En dit kan ik pas weten bij de onbuttonclick event, die na de pageload wordt uitgevoerd. Ik begrijp niet hoe ik dan de juiste placeholder kan instellen voor de pageload is geeindigd. Een tip hierover zou zeer gewaardeerd worden :) .

Ik heb al geprobeerd om de placeholders in de pageinit te laden en te binden, en dan op onbuttonclick visible true/false te zetten adhv welke knop is geklikt, maar ook dit werkt niet.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:26

gorgi_19

Kruimeltjes zijn weer op :9

Gunp01nt schreef op donderdag 26 mei 2005 @ 15:56:
Viewstate werkt wel goed omdat de inhoud van de pagina blijft bij een postback. Als de viewstate ongeldig zou zijn, zou je een lege pagina moeten zien.
Nee hoor :) Check op viewstate is niet zo heel erg strict. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


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

Not Pingu

Dumbass ex machina

Sorry voor de kick, maar ik heb lopen klieren met verschillende mogelijke oplossingen die niet hebben mogen baten.

Ik heb een CMS dat bestaat uit een index.aspx met een Placeholder. In die placeholder wordt een template geladen in de vorm van een User Control met daarop wat HTML en een of meer placeholders.
In die laatste placeholders worden weer een of meer modules geladen, ook in de vorm van User Controls. Daarop bevinden zich soms andere controls, bijv. om de inhoud van een module te bewerken.

Dus:
ASPX pagina --> User Control (template) --> User Controls (modules) --> inhoud van modules

Het probleem is dus dat controls tussen 2 postbacks soms andere nummers in hun ID meekrijgen. Het lijkt erop dat de volgorde waarin controls worden gerenderd, per postback verschilt. Correct me if I'm wrong.

Dit heeft tot gevolg dat een postback soms wel, soms niet werkt als de nummering van een control voor en na de postback verschilt. Dit vindt willekeurig plaats, waardoor het soms lange tijd goed werkt, en je daarna ineens 7x moet klikken voordat het goedwerkt.

Na wat testen kom ik erachter dat het alleen lijkt te gebeuren als er een datagrid op de pagina aanwezig is, of als tijdens de postback een servercontrol wordt verborgen met Control.Visible = false;

Opzich is het logisch dat je bij het verbergen van een control de control collectie verandert, en ook een datagrid met edititemtemplates zorgt natuurlijk voor een andere control-samenstelling.
Maar waarom veroorzaakt dat hier een probleem? Komt het door de user controls, of door het feit dat de hele pagina elke keer opnieuw opgebouwd wordt?

Heeft iemand suggesties hoe ik dit kan oplossen? Bij voorbaat dank :)

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


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

Not Pingu

Dumbass ex machina

Zul je net zien, vlak nadat ik een reply post, vind ik deze thread op ww.asp.net waarin wordt aanbevolen zelf een ID aan de geinjecteerde usercontrols mee te geven.
Dit heb ik geimplementeerd en lijkt vooralsnog perfect te werken :D

code:
1
2
3
Dim objModule As UserControl = Page.LoadControl("MyControl.ascx")
objTarget.Controls.Add(objModule)
objModule.ID = "mijnControl"

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

Pagina: 1