[ASP.NET/C#] Button Click event gaat niet af in UpdatePanel?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Wijnbo
  • Registratie: December 2002
  • Laatst online: 06-09 20:35

Wijnbo

Electronica werkt op rook.

Topicstarter
Situatie : asp.net pagina met updatepanel.

Relevante code:

Update panel:

C#:
1
<asp:UpdatePanel runat="server" ID="upSystemOverview" UpdateMode="Conditional" ChildrenAsTriggers="true">


Vervolgens wordt in de code behind dynamisch (aan het updatepanel) een usercontrol toegevoegd. Dit usercontrol bevat een button. Alles wordt prima weer gegeven, maar het click event van de button gaat niet af. Ik heb de volgende trigger toegevoegd:

btnSave is dus de button in de usercontrol, die weer in het updatepanel staat.

C#:
1
var trigger = new AsyncPostBackTrigger {ControlID = "btnSave", EventName = "Click"};


Deze code staat in de Page_Load van de user control, samen met de code die kijkt of het usercontrol in een updatepanel zit, wat uiteindelijk het volgende geeft:

C#:
1
((UpdatePanel)Parent.Parent.Parent).Triggers.Add(trigger);


Beetje " :') " code maar goed. Had het eerst in de code behind staan na het stuk wat de user control creeert, dit had echter ook geen effect. Wat doe ik verkeerd?

-EDIT-

Ik bedenk me zojuist dat de toegevoegde trigger in het updatepanel natuurlijk het id van de button van z'n lang zal ze leven nooit kan vinden?

Ik heb het overigens ook al geprobeerd met ControlID = btnSave.ClientID in de trigger parameter.

[ Voor 10% gewijzigd door Wijnbo op 10-07-2009 19:24 ]


Acties:
  • 0 Henk 'm!

Verwijderd

De dynamische usercontrol moet je in de page_load (init mag ook) toevoegen aan je pagina, omdat hij anders na een postback verdwenen is. Doe je dat?

[ Voor 4% gewijzigd door Verwijderd op 10-07-2009 23:19 ]


Acties:
  • 0 Henk 'm!

  • Wijnbo
  • Registratie: December 2002
  • Laatst online: 06-09 20:35

Wijnbo

Electronica werkt op rook.

Topicstarter
Verwijderd schreef op vrijdag 10 juli 2009 @ 23:19:
De dynamische usercontrol moet je in de page_load (init mag ook) toevoegen aan je pagina, omdat hij anders na een postback verdwenen is. Doe je dat?
Er, de button in de usercontrol in het updatepanel knalt er toch geen postback door heen? Het idee achter een updatepanel is toch dat je juist GEEN volledige postback krijgt? Of moet ik de dynamische controls gewoon genereren in de page load indien ze nodig zijn? (Bijhouden met sessie ofzo)

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Wijnbo schreef op zaterdag 11 juli 2009 @ 13:00:
[...]


Er, de button in de usercontrol in het updatepanel knalt er toch geen postback door heen? Het idee achter een updatepanel is toch dat je juist GEEN volledige postback krijgt? Of moet ik de dynamische controls gewoon genereren in de page load indien ze nodig zijn? (Bijhouden met sessie ofzo)
Kort door de bocht vertaalt asp.net's Ajax toolkit op ajax gebaseerde postbacks terug naar 'echte' postbacks zodat het hele page rendering mechanisme van de klassieke asp.net aanpak in stand blijft.

Imho is het gebruik van de Ajax toolkit trouwens voor serieuze applicaties die onderhouden moeten worden behoorlijk not-done. Het levert een grote rommel aan spaghetti code op. Als je dan toch ajax wilt gebruiken, ga dan volledig over op rich client UIs in javascript en haal alleen data op met ajax vanuit een xml of json webservice. (Separation of concerns, en zo...)

Acties:
  • 0 Henk 'm!

Verwijderd

Wijnbo schreef op zaterdag 11 juli 2009 @ 13:00:
[...]


Er, de button in de usercontrol in het updatepanel knalt er toch geen postback door heen? Het idee achter een updatepanel is toch dat je juist GEEN volledige postback krijgt? Of moet ik de dynamische controls gewoon genereren in de page load indien ze nodig zijn? (Bijhouden met sessie ofzo)
De oplossing van IntroV is nodig door de (imho niet intuïtieve) page life cycle van .NET. In het begin moest ik daar ook aan wennen en heeft er uiteindelijk toe geleid dat ik geen ASP.NET controls meer gebruik. De page life cycle wordt na het client request weer helemaal nagespeeld op de server. De UserControl bestaat dan dus nog niet en de button click wordt dan niet uitgevoerd (wellicht niet helemaal de juiste uitleg, maar daar komt het ongeveer op neer, het is al even geleden). Ik gebruikte inderdaad ook altijd deze oplossing, eerst alles in de page load toevoegen en dan de events afvangen.