Solved

How to get RaisePostBackHandler to fire before CreateChildControls is called in a Custom Composite Control?

Posted on 2009-04-07
5
510 Views
Last Modified: 2013-12-17
Hi,

I am looking at two examples in the msdn docs.

The  first example I am looking is here : http://msdn.microsoft.com/en-us/library/aa719907(VS.71).aspx it states that by adding the event to the events property of the control it is more efficient. Also in the example they are implementing IPostBackEventHandler.

In this second example found here, http://msdn.microsoft.com/en-us/library/3257x3ea.aspx

They are are kind of doing basically the same thing but no implementation of IPostBackEventHandler.

I have a compsite control that may have up to 3 Image buttons at the same time so I am not sure if I need to create 3  private static readonly object EventSubmitKey =    new object(); or just one?

I am also not sure if the IPostBackEventHandler should be implemented or not as the second example doesn't implement it, so I am assuming the CompsiteControl already does?

In this second example the buttons click event is handled in the composite control then the submit event is raised. Is it possible to handle a buttons click event in the composite control first than bubble it back to the Page or is that what this is doing?

Thanks!

I originally posted this question here:  http://forums.asp.net/t/1405321.aspx
I have since discovered that ImageButtons implement the IPostBackEventHandler interface themselves thus causing the issue of the RaisePostBackEvent not firing. I then decided to just add an image to my composite control and was able to get the RaisePostBackEvent to fire but not until after the CreateChildControls method already fired.
Below is a code snipped of what I tried that was able to get the RaisePostBackEvent to fire but like I stated this did not fire untill after the CreateChildControls method executed. I am starting to think that is how it is suppose to work but I am not sure.
The reason I wanted the event to fire before the CreateChildControls method is so I can dynamically change what controls are in my Composite Control.
Literal myLiteral = new Literal();

myLiteral.Text = "<img src=\"Images/next.gif\" onclick=\"" +

Page.ClientScript.GetPostBackEventReference(this, "") + "\" />";

currentPanel.Controls.Add(myLiteral);

Open in new window

0
Comment
Question by:OutOfTouch
5 Comments
 
LVL 3

Accepted Solution

by:
OutOfTouch earned 0 total points
ID: 24135560
Upon further reading I don't believe it is possible to have the RaisePostBack method fire before the CreateChildControls Method. That is just not how the events are processed.
I guess I should have not listened to another's advice in the MS forum where I originally posted this question well at least not completely, instead  I should have paid closer attention to what the MSDN Doc says.
From the msdn docs on CreateChildControls method:
Called by the ASP.NET page framework to notify server controls that use composition-based implementation to create any child controls they contain in preparation for posting back or rendering.
The following only works if I don't use an ImageButton because the image button already implements the IPostBackEventHandler interface, the UniqueID(EVENTTARGET) of the image button causing the postback would not be the same as my composite control that houses this ImageButton, this would mean the RaisePostBack event in my composite control would never fire.
So instead of an image button I just used an html image and I did discover that if I let my control run the CreateChildControls method on postback than it runs the RaisePostBackMethod, I can than set ChildControlsCreated  to false which will cause the CreateChildControls method to fire again, this causes another issue,  my control is now empty when it renders after the additional call to CreateChildControls, I think this is related to viewstate but I am not sure.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
I need help embedding an image as HTML in my vb.net application 3 48
Need to pass a connection through class/Method 1 39
Run time Error 4 34
Error on link 14 36
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

919 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now