I have a UserControl A that has to be loaded first and after that completes loading, I need to load a UserControl B.
I prefer to add both these user controls on the page at compile time (would like to avoid dynamic loading if possible).
- If I add user controls on the page at compile time and set visible to false for User Control B, does it still execute the B’s code behind? I can then set the visibility to true after loading User Control A
- Should I be using events/delegates for notifying the completion of loading User Control A?
Don’t load everything in the page event in control b, just put a method on control b to be called. Then add an event to control a which the page consumes, when the event is raised, call the load method on control b.
Edit: SampleCode
Ok so for example, create
Put both user controls into the aspx page.
Then in control 1, create a delegate and event.
So I have the event raised on page load. So you would have your logic in there thats required, when your done, calls MyEvent event.
In the page you want to add a handler for that event so when it’s called you can do something with it.
So when the page is initialized I add the event handler. In the event handler I call a custom method on the second control to load stuff.
Then in the second control I have:
So this allows control 1 to load something, say it’s done, when the page knows it’s done, it can tell control 2 to do something.
Edit: After discussing this with a friend I’ll explain what I mean by controlling the order.
You cannot control the order of page-life-cycle events. i.e: You can’t have Control A, run through all it’s page-life-cycle events, then once it’s done, have Control B run through all it’s page-life-cycle events.
If you do-away with the page life cycle, you can do a degree, as my example above shows, create a way of controlling the order in which the controls are rendered. By raising an event(s) at certain points when Control A is finished, you can tell Control B to do something.
The intermediate between the two controls is the page which handles the events raised by Control A which calls a method on Control B. You (well you can hack around to do it) can’t specifically make Control A tell Control B to do something because that creates a direct dependency between the two controls which is bad.