Works:
protected void Page_Load(object sender, EventArgs e)
{
myButton.Click += new EventHandler(myButton_Click);
}
Doesn’t work:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
myButton.Click += new EventHandler(myButton_Click);
}
}
Now, what I expected in the second example was for the eventhandler to be wired to the button only when it is not a postback (i.e. the first time the page is loaded), and then on any postback, the button would no longer run the method associated with the event. That doesn’t seem to be the case — from the very first load (not a postback), the button does nothing when clicked.
My suspicion is that this is related to the page life cycle — but I’m not quite sure where this falls into that. If I understand correctly, the method associated with the event gets run after the page has posted back (even if you clicked it on the first time the page loads), but I’m referring to the wiring up of the event to the method with the EventHandler delegate, not the actual running of the associated method.
Note: this is purely an attempt to gain a better understanding of what’s going on behind the scenes, and not an attempt to solve a real world problem.
You need to think about how the code is executed with each page request. What happens on the server is that a class instance is created for each request and if the line of code
myButton.Click += new EventHandler(myButton_Click);
is conditional it means the event handler is not wired to the event on postback.
In other words if you write something like
This translates to the code you wrote and the event gets wired with each request.